Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 group by - переменное кол-во колонок  [new]
groupbydynamic
Guest
Можно ли сделать group by с переменным кол-вом колонок, не используя при этом динамического SQL и кучу if-else?

Задача примерно такая:

если есть настройка

declare @flag bit

В зависимости от её значения нужно сгруппировать поля в таблице тем или иным способом:
declare @t table(id int, value float, f1 int, f2 int, f3 int)


if @flag  = 1
select max(t.id)
        ,t.f1
        ,t.f2
from @t t
group by f1, f2
else
select max(t.id)
        ,t.f1
        ,t.f2
        ,t.f3
from @t t
group by f1, f2, f3


Можно этот последний запрос записать без динамического SQL в один запрос? Если да, то как.
29 июл 15, 10:41    [17948721]     Ответить | Цитировать Сообщить модератору
 Re: group by - переменное кол-во колонок  [new]
virtuOS
Member

Откуда: большая деревня
Сообщений: 266
Собрать данные в временную таблицу, используя group by ... with cube. В зависимости от условия делать выборки.
29 июл 15, 10:49    [17948766]     Ответить | Цитировать Сообщить модератору
 Re: group by - переменное кол-во колонок  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 658
groupbydynamic,

select max(t.id)
        ,t.f1
        ,t.f2
        ,(CASE WHEN @flag  = 1 THEN 0 ELSE t.f3 END)
from @t t
group by f1, f2, (CASE WHEN @flag  = 1 THEN 0 ELSE t.f3 END)
29 июл 15, 11:12    [17948892]     Ответить | Цитировать Сообщить модератору
 Re: group by - переменное кол-во колонок  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
groupbydynamic
Можно этот последний запрос записать без динамического SQL в один запрос?
Где у Вас динамический SQL?
Последний запрос можно также записать в виде UNION ALL, где в первом SELECTе where @flag=1, а во втором where @flag is null or @flag<>1
29 июл 15, 11:15    [17948905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить