Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
virtuOS Member Откуда: большая деревня Сообщений: 266 |
Собрать данные в временную таблицу, используя group by ... with cube. В зависимости от условия делать выборки. |
29 июл 15, 10:49 [17948766] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
Последний запрос можно также записать в виде UNION ALL, где в первом SELECTе where @flag=1, а во втором where @flag is null or @flag<>1 |
||
29 июл 15, 11:15 [17948905] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |