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

Откуда:
Сообщений: 18
Есть запрос вида
select field1, sum(field2), sum(field3), sum(field4)
from tab1
where field1>0
group by field1

а теперь я хочу еще сгруппировать из этой выборки
по некоторым значениям field1 отдельно и выдать теже поля.
Т.е. запрос выдает
a 3 4 6
b 2 4 4
c 7 7 5
d 5 7 4

надо объединить f=a+b+m и h=с+d+n
f 5 8 10
h 12 14 9
16 дек 12, 12:21    [13638283]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать сгруппированное  [new]
Гость333
Member

Откуда:
Сообщений: 3683
with tab1 as
(  select *
   from (  values('a', 3, 4, 6),
                 ('b', 2, 4, 4),
                 ('c', 7, 7, 5),
                 ('d', 5, 7, 4)
        ) as t(field1, field2, field3, field4)
)
select
  case
    when field1 in ('a', 'b') then 'f'
    when field1 in ('c', 'd') then 'h'
    else field1
  end as field1,
  sum(field2) as field2, sum(field3) as field3, sum(field4) as field4
from
  (  select field1, sum(field2) as field2, sum(field3) as field3, sum(field4) as field4
     from tab1
     -- where field1 > 0 -- тут вы что-то путаете, с таким условием будет ошибка
     -- Conversion failed when converting the varchar value 'a' to data type int.
     group by field1
  ) tmp
group by
  case
    when field1 in ('a', 'b') then 'f'
    when field1 in ('c', 'd') then 'h'
    else field1
  end;
16 дек 12, 14:56    [13638701]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать сгруппированное  [new]
aqula
Member

Откуда:
Сообщений: 18
O_O
ОГО вот это уровень!
Много умных запросов.
А может с юнионами можно проще сделать?
16 дек 12, 19:56    [13639558]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать сгруппированное  [new]
shr-13
Guest
declare @tab1 table( field1 varchar( 255) , field2 int, field3 int, field4 int)

insert @tab1
values	('a', 3, 4, 6),
        ('b', 2, 4, 4),
        ('c', 7, 7, 5),
        ('d', 5, 7, 4)

select 'f', sum(field2), sum(field3), sum(field4) 
from @tab1
where field1 in ( 'a', 'b')
union all
select 'h', sum(field2), sum(field3), sum(field4) 
from @tab1
where field1 in ( 'c', 'd')
17 дек 12, 13:03    [13642184]     Ответить | Цитировать Сообщить модератору
 Re: Сгруппировать сгруппированное  [new]
aqula
Member

Откуда:
Сообщений: 18
Во супер. Поклон Вам обоим до земли. Спасибо.
17 дек 12, 17:11    [13644531]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить