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

Откуда:
Сообщений: 396
Здравствуйте, можно ли в зависимости от условий сгруппировать результаты запроса?

..
GROUP BY
column_a,
column_b,
IF bla bla bla THEN columnc_c
IF bla bla bla THEN column_e


Спасибо!
27 май 14, 16:17    [16080774]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Glory
Member

Откуда:
Сообщений: 104760
IF в тексте запроса называется CASE
27 май 14, 16:18    [16080786]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Так нельзя сделать. Только динамическим запросом.
27 май 14, 16:56    [16081099]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Glory
Member

Откуда:
Сообщений: 104760
Владислав Колосов
Так нельзя сделать. Только динамическим запросом.

Можно. Просто сначала нужно получить вычисляемый столбец. А потом уже группировать.
27 май 14, 17:09    [16081210]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
o-o
Guest
Владислав Колосов,
почему нельзя?

declare @p int = 1; --так сгруппирует по "а"

declare @t table (a int, b int, val int);
insert into @t values (1, 2, 10), (1, 3 , 20), (7, 3, 30);

select sum(val), case @p when 1 then a else b end
from @t 
group by case @p when 1 then a else b end
----------------
sum_val	gr_col
30	1
30	7

-- declare @p int = 2; --теперь сгруппирует по "b"
...
sum_val	gr_col
10	2
50	3
27 май 14, 17:11    [16081231]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Glory
Владислав Колосов
Так нельзя сделать. Только динамическим запросом.

Можно. Просто сначала нужно получить вычисляемый столбец. А потом уже группировать.

Это было первое, о чем я подумал. Но затем я не увидел ничего о требованиях к столбцам.
27 май 14, 17:25    [16081371]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Glory
Member

Откуда:
Сообщений: 104760
Владислав Колосов
Но затем я не увидел ничего о требованиях к столбцам.

В смысле ?
Группировка по вычисляемому полю требует наличия этого вычисляемого поля.
27 май 14, 17:28    [16081392]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Glory, вот и не факт, что это вычисляемое поле нужно в результате.

Лучше всего дождаться автора :)
27 май 14, 17:34    [16081450]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Glory
Member

Откуда:
Сообщений: 104760
Владислав Колосов
Glory, вот и не факт, что это вычисляемое поле нужно в результате.

И что мешает не отображать это поле ?
27 май 14, 17:39    [16081489]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Glory
Владислав Колосов
Glory, вот и не факт, что это вычисляемое поле нужно в результате.

И что мешает не отображать это поле ?

Это уже философия, а не конкретные требования.
27 май 14, 17:42    [16081519]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Glory
Member

Откуда:
Сообщений: 104760
Владислав Колосов
Это уже философия, а не конкретные требования.

Ага. При динамическом запросе философии не будет что ли ? Или при динамическом запросе не надо решать, какие поля отображать ?
27 май 14, 17:44    [16081531]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Возможна ситуация, когда, например, требуется четко оговоренные поля возвращаемого набора данных. В случае с вычисляемым полем придется использовать промежуточную таблицу для подготовки результата. Опять же, если автор собирается работать с разными таблицами, создать универсальную отмычку, то ему вычисляемое не подойдет. Нужно больше информации, иначе обсуждение просто полемическое.
27 май 14, 17:49    [16081554]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
Glory
Member

Откуда:
Сообщений: 104760
Владислав Колосов
В случае с вычисляемым полем придется использовать промежуточную таблицу для подготовки результата.

Вы не слышали про вложенные запросы ?
27 май 14, 17:50    [16081561]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4270
o-o, ненужная сложность в
select sum(val), case @p when 1 then a else b end
from @t 
group by case @p when 1 then a else b end

В этом случае достаточно
select sum(val), case @p when 1 then a else b end
from @t 
group by 2
27 май 14, 17:55    [16081601]     Ответить | Цитировать Сообщить модератору
 Re: GROUP BY в зависимости от условий  [new]
o-o
Guest
SQL2008,

вы, кажись, попутали group by с order by.
в обоих есть by :)

Even though the SELECT clause appears first in the query, it is logically processed almost last.
The clauses are logically processed in the following order:
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY
27 май 14, 18:16    [16081712]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить