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

Откуда:
Сообщений: 158
Здравствуйте.

Что-то похожее нашел, но всё равно не докопался сам.

Имеется таблица

[CSV] тип
1
1
2
2
2

наименование
молоко
кефир
кирпич
цемент
песок
[CSV]


Нужно получить
20 июл 12, 11:17    [12892201]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Арчи05
Member

Откуда:
Сообщений: 158
Здравствуйте.

Что-то похожее нашел, но всё равно не докопался сам.

Имеется таблица

тип наименование
1 молоко
1 кефир
2 кирпич
2 цемент
2 песок



Нужно получить

тип наименование
Продукты
____1 молоко
____1 кефир
Стройматериалы
____2 кирпич
____2 цемент
____2 песок
20 июл 12, 11:20    [12892231]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Арчи05,
Нужно завести в один справочник как типы так и подтипы.
А также таблице из двух полей Id и Par_ID:
1 0
1 2
1 3
4 5
4 6
20 июл 12, 12:29    [12892739]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
А дальше пользоваться рекурсией.
20 июл 12, 12:30    [12892751]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Арчи05
Member

Откуда:
Сообщений: 158
Yagrus2,

Я думал может можно как-нибудь одним запросом это сделать, например с помощью CUBE....
20 июл 12, 13:57    [12893309]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Валдай
Member

Откуда:
Сообщений: 113
какая рекурсия, какие кубы..

select x.t, x.n
from @itemtype it
cross apply
( select 
    t=it.name,
    n=''     ,
    type=0 
  union all 
  select 
    t=right(replicate('_',10) + cast(itemtype_id as varchar), 10),
    n=name    ,
    type=1
  from @item 
  where itemtype_id = it.itemtype_Id
)x
order by it.name,x.type,x.n
20 июл 12, 15:35    [12893937]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Валдай
Member

Откуда:
Сообщений: 113
declare @itemtype table(itemtype_id int, name varchar(50))
declare @item table (item_id int, itemtype_id int, name varchar(50)) 

insert @itemtype values (1, 'Продукты')
insert @itemtype values (2, 'Стройматериалы')

insert @item values(1,1,'молоко')
insert @item values(2,1,'кефир')
insert @item values(3,2,'кирпич')
insert @item values(4,2,'цемен')
insert @item values(5,2,'песок')
20 июл 12, 15:35    [12893939]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Арчи05,
На сколько я знаю CUBE делает подытог.
Если делать по предложенному мной варианту то получится следующее:
Твое дерево будет иметь всего два уровня родителя и дочку...
К имеющейся таблице
Par_ID Id
1 0
1 2
1 3
4 5
4 6
нужно используя union добавить
строки вида
1 1
4 4
А там уже использовать case
20 июл 12, 15:40    [12893972]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 902
Валдай
какая рекурсия, какие кубы..

select x.t, x.n
from @itemtype it
cross apply
( select 
    t=it.name,
    n=''     ,
    type=0 
  union all 
  select 
    t=right(replicate('_',10) + cast(itemtype_id as varchar), 10),
    n=name    ,
    type=1
  from @item 
  where itemtype_id = it.itemtype_Id
)x
order by it.name,x.type,x.n


Разьве это не рекурсивный запрос?
20 июл 12, 15:43    [12893989]     Ответить | Цитировать Сообщить модератору
 Re: Как построить запрос с группировкой  [new]
Валдай
Member

Откуда:
Сообщений: 113
Yagrus2
Разьве это не рекурсивный запрос?

точно вам говорю - не рекурсия:)

Главный признак рекусии это наличие рекурсивной части. ее тут нет.
да и под cross apply рекурсию не запустить точно :)
20 июл 12, 15:47    [12894030]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить