Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
id*id_parent* mode*virtual_pole1*virtual_pole2
----------------------------------------------------------
1 *** 0 ****** 1 ****** 1 ********* 3
2 *** 1 ****** 2 ****** 1 *********
3 *** 1 ****** 3 ****** 1 *********
4 *** 1 ****** 4 ****** 1 *********
5 *** 0 ****** 1 ****** 5 ********* 1
6 *** 5 ****** 2 ****** 5 *********
7 *** 0 ****** 1 ****** 7 ********* 2
8 *** 7 ****** 2 ****** 7 *********
9 *** 7 ****** 3 ****** 7 *********
10 *** 0 ****** 1****** 10 ********* 1
11 ***10 ****** 2 ****** 10 *********
12 *** 0 ****** 1 ****** 12 ********* 0
------------------------------------------------------------
необходимо выбрать записи в зависимости от mode.
т.е если mode=2 то выводятся две пары записей: с (id=5и6) и (id=10и11)
два виртуальных поля возможны для использования по заданию, если их можно обойти то еще лучше.
14 фев 05, 16:47    [1320103]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
declare @t table(id int,id_parent int,mode int)
insert into @t
select 1 , 0 , 1 union all
select 2 , 1 , 2 union all
select 3 , 1 , 3 union all
select 4 , 1 , 4 union all
select 5 , 0 , 1 union all
select 6 , 5 , 2 union all
select 7 , 0 , 1 union all
select 8 , 7 , 2  union all
select 9 , 7 , 3  union all
select 10 , 0 , 1 union all
select 11 ,10 , 2 union all
select 12 , 0 , 1 
что на этом наборе данных надо получить(прям результат)
а то чё то вовсе нисегошеньки не понятно
14 фев 05, 16:57    [1320133]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
Garisson
id*id_parent* mode*virtual_pole1*virtual_pole2
----------------------------------------------------------
1 *** 0 ****** 1 ****** 1 ********* 3
2 *** 1 ****** 2 ****** 1 *********
3 *** 1 ****** 3 ****** 1 *********
4 *** 1 ****** 4 ****** 1 *********
5 *** 0 ****** 1 ****** 5 ********* 1
6 *** 5 ****** 2 ****** 5 *********
7 *** 0 ****** 1 ****** 7 ********* 2
8 *** 7 ****** 2 ****** 7 *********
9 *** 7 ****** 3 ****** 7 *********
10 *** 0 ****** 1****** 10 ********* 1
11 ***10 ****** 2 ****** 10 *********
12 *** 0 ****** 1 ****** 12 ********* 0
------------------------------------------------------------
необходимо выбрать записи в зависимости от mode.
т.е если mode=2 то выводятся две пары записей: с (id=5и6) и (id=10и11)
два виртуальных поля возможны для использования по заданию, если их можно обойти то еще лучше.



необходимо получить набор строк с выбранным модом
если мод=4 до выводим записи с номером 1,2,3,4, если мод=1 то запись 12
14 фев 05, 17:19    [1320215]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
[quot Garisson
необходимо получить набор строк с выбранным модом
если мод=4 до выводим записи с номером 1,2,3,4, если мод=1 то запись 12[/quot]
это что, тест на IQ?
что то не могу уловить логической связи между mode=4 и строками №1,№2,№3 и №4?
14 фев 05, 17:22    [1320233]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
если мод=4 до выводим записи с номером 1,2,3,4, если мод=1 то запись 12


А почему 12ую запись, а не 1. Условия не ясны во втором случаи.Да и в первом тоже. можно предположить, что надо вернуть все записи с одинаковым id_parent и самого parent.
14 фев 05, 17:24    [1320239]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
что за virtual_pole1?
без него можно или нет?
14 фев 05, 17:26    [1320243]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
Garisson
id*id_parent* mode*virtual_pole1*virtual_pole2
----------------------------------------------------------
1 *** 0 ****** 1 ****** 1 ********* 3
2 *** 1 ****** 2 ****** 1 *********
3 *** 1 ****** 3 ****** 1 *********
4 *** 1 ****** 4 ****** 1 *********
5 *** 0 ****** 1 ****** 5 ********* 1
6 *** 5 ****** 2 ****** 5 *********
7 *** 0 ****** 1 ****** 7 ********* 2
8 *** 7 ****** 2 ****** 7 *********
9 *** 7 ****** 3 ****** 7 *********
10 *** 0 ****** 1****** 10 ********* 1
11 ***10 ****** 2 ****** 10 *********
12 *** 0 ****** 1 ****** 12 ********* 0
------------------------------------------------------------
необходимо выбрать записи в зависимости от mode.
т.е если mode=2 то выводятся две пары записей: с (id=5и6) и (id=10и11)
два виртуальных поля возможны для использования по заданию, если их можно обойти то еще лучше.



необходимо получить набор строк с выбранным модом
если мод=4 до выводим записи с номером 1,2,3,4, если мод=1 то запись 12
14 фев 05, 17:27    [1320245]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
pkarklin
автор
если мод=4 до выводим записи с номером 1,2,3,4, если мод=1 то запись 12


А почему 12ую запись, а не 1. Условия не ясны во втором случаи.Да и в первом тоже. можно предположить, что надо вернуть все записи с одинаковым id_parent и самого parent.

ага-ага, я тоже так предположил, но для мод=1 - сломало схему
теперь я смотрю на virtual_pole1 - те все записи, у которых virtual_pole1 - такое же значение
но автор сказал, что можно, вроде как и без него(тк оно вычисляемое(из другого топика)), но вот как оно вычисляется,это виртуальное поле???
14 фев 05, 17:28    [1320249]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
потому что у 12 записи нет дочерних записей, т.е нет записей с id_parent=12 а
у записи 1 есть дочерние записи это 2,3 и 4 и конечная с mode=4 значит этот набор выводится njkmrj при mode=4.
14 фев 05, 17:33    [1320261]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
Garisson
потому что у 12 записи нет дочерних записей, т.е нет записей с id_parent=12 а
у записи 1 есть дочерние записи это 2,3 и 4 и конечная с mode=4 значит этот набор выводится njkmrj при mode=4.

что-то не того
а чем запись №1 не подходит для mode=1?
14 фев 05, 17:38    [1320276]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
Smirnov Anton
pkarklin
автор
если мод=4 до выводим записи с номером 1,2,3,4, если мод=1 то запись 12


А почему 12ую запись, а не 1. Условия не ясны во втором случаи.Да и в первом тоже. можно предположить, что надо вернуть все записи с одинаковым id_parent и самого parent.

ага-ага, я тоже так предположил, но для мод=1 - сломало схему
теперь я смотрю на virtual_pole1 - те все записи, у которых virtual_pole1 - такое же значение
но автор сказал, что можно, вроде как и без него(тк оно вычисляемое(из другого топика)), но вот как оно вычисляется,это виртуальное поле???


в virtual_pole1 значения заносятся так:
идет селект,если значение поля id_parent=0, то virtual_pole1= id_rec записи
иначе virtual_pole1=id_parent
14 фев 05, 17:40    [1320281]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Garisson
потому что у 12 записи нет дочерних записей, т.е нет записей с id_parent=12 а
у записи 1 есть дочерние записи это 2,3 и 4 и конечная с mode=4 значит этот набор выводится njkmrj при mode=4.

mode - степень вложенности.
Нужно для заданного mode вывести все ветки, имеющие эту вложенность.
14 фев 05, 17:42    [1320287]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
Glory
Garisson
потому что у 12 записи нет дочерних записей, т.е нет записей с id_parent=12 а
у записи 1 есть дочерние записи это 2,3 и 4 и конечная с mode=4 значит этот набор выводится njkmrj при mode=4.

mode - степень вложенности.
Нужно для заданного mode вывести все ветки, имеющие эту вложенность.

да вроде не вложенность...
14 фев 05, 17:44    [1320296]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
исходя из значений virtual_pole1 делается выборка записей относительно mode,
т.е количество совпадаемых значений в поле virtual_pole1 = заданному mode
к примеру четыре единицы соответствуют mode=1, три семерки-mode=3
14 фев 05, 17:45    [1320302]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Smirnov Anton
Glory
Garisson
потому что у 12 записи нет дочерних записей, т.е нет записей с id_parent=12 а
у записи 1 есть дочерние записи это 2,3 и 4 и конечная с mode=4 значит этот набор выводится njkmrj при mode=4.

mode - степень вложенности.
Нужно для заданного mode вывести все ветки, имеющие эту вложенность.

да вроде не вложенность...

Да. Скорее похоже на нумерацию внутри ветки
14 фев 05, 17:48    [1320317]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
Glory
Garisson
потому что у 12 записи нет дочерних записей, т.е нет записей с id_parent=12 а
у записи 1 есть дочерние записи это 2,3 и 4 и конечная с mode=4 значит этот набор выводится njkmrj при mode=4.

mode - степень вложенности.
Нужно для заданного mode вывести все ветки, имеющие эту вложенность.

правильно...
14 фев 05, 17:49    [1320320]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
и последний наводящий вопрос:
если(можно) добавить строку
13 *** 9 ****** 3
что произойдёт?
14 фев 05, 17:51    [1320325]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
моя аська могу объяснить подробнее 109-770-146
14 фев 05, 17:52    [1320333]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
вообще как бы добавить такую строку нельзя,т.к добавление идет строго в порядке mode=1, потом 2,3,4,5 и любая запись с модом=1 обязательно будет
иметь нудевой id_parent
15 фев 05, 09:12    [1321131]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
вообще как бы добавить такую строку нельзя,т.к добавление идет строго в порядке mode=1, потом 2,3,4,5 и любая запись с модом=1 обязательно будет
иметь нудевой id_parent
15 фев 05, 09:15    [1321139]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
смотрю со вчерашнего дня мало что изменилось
ваши объяснения до сих пор не понятны
вот ваш первый пример
есть лес из деревьев глубины два, вот он схематически на рисунке

1 4 7 10 12
/ / \ | /\ |
2 3 4 6 8 9 11
итак
вопрос №1
1) как я понял, именно на этом примере вам надо получить следующее
-задаётся параметр x
-необходимо из этого леса выбрать все деревья, которые имеют x элементов
2) у вас могут быть деревья глубины больше 2-х?
15 фев 05, 09:29    [1321165]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
дерево не совсем верное должно быть так: родители-значения виртуальных полей а дети-значения из id , входой параметр mode для веток соответсвенно
будет равен для первой 4, второй-2,..-3,...-2,...-1
**1***4*** 7***10***12
*//|\***/\***/|\***/ \****|
1234*56**789*10*11*12
15 фев 05, 10:25    [1321351]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
вопрос1-правильно
вопрос2-более 2х быть не может
15 фев 05, 10:27    [1321358]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Smirnov Anton
Member

Откуда: Н.Новгород
Сообщений: 3220
ну тогда вот так
declare @t table(id int,id_parent int,mode int)
insert into @t
select 1 , 0 , 1 union all
select 2 , 1 , 2 union all
select 3 , 1 , 3 union all
select 4 , 1 , 4 union all
select 5 , 0 , 1 union all
select 6 , 5 , 2 union all
select 7 , 0 , 1 union all
select 8 , 7 , 2  union all
select 9 , 7 , 3  union all
select 10 , 0 , 1 union all
select 11 ,10 , 2 union all
select 12 , 0 , 1 

declare @x int
set @x=2
select t1.* from @t t1 join 
(select count(id) as am,case id_parent when 0 then id else id_parent end as vf1 from @t
group by case id_parent when 0 then id else id_parent end ) t2
on case t1.id_parent when 0 then t1.id else t1.id_parent end=t2.vf1
where t2.am=@x
15 фев 05, 10:38    [1321394]     Ответить | Цитировать Сообщить модератору
 Re: помогите новичку с селектом  [new]
Garisson
Member

Откуда:
Сообщений: 93
Smirnov Anton
ну тогда вот так
declare @t table(id int,id_parent int,mode int)
insert into @t
select 1 , 0 , 1 union all
select 2 , 1 , 2 union all
select 3 , 1 , 3 union all
select 4 , 1 , 4 union all
select 5 , 0 , 1 union all
select 6 , 5 , 2 union all
select 7 , 0 , 1 union all
select 8 , 7 , 2  union all
select 9 , 7 , 3  union all
select 10 , 0 , 1 union all
select 11 ,10 , 2 union all
select 12 , 0 , 1 

declare @x int
set @x=2
select t1.* from @t t1 join 
(select count(id) as am,case id_parent when 0 then id else id_parent end as vf1 from @t
group by case id_parent when 0 then id else id_parent end ) t2
on case t1.id_parent when 0 then t1.id else t1.id_parent end=t2.vf1
where t2.am=@x


спасибо большое за потраченное время буду разбираться.
15 фев 05, 11:10    [1321521]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить