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

Откуда:
Сообщений: 43
Здравствуйте! Никак не могу разобраться в одном вопросе...
Есть предположим таблица А, где находится дата, сумма и id клиента
Например,
id date summa
1 01.02.10 10
1 02.02.10 20
1 03.02.10 30
1 01.03.10 40
1 02.03.10 50
1 03.03.10 60

Нужно написать запрос, который бы возвращал суммы в разрезе месяцев...Результат должен быть таким
id Feb March и т.д
1 60 150

Заранее спасибо, надеюсь на вашу поддержку!
6 июл 11, 13:22    [10931721]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35400
Блог
функции year, month + group by
6 июл 11, 13:26    [10931765]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
MrBlackJack,

case, pivot
6 июл 11, 13:29    [10931788]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Критик
функции year, month + group by
Лучше
GROUP BY DATEDIFF(MONTH,0,[date])
6 июл 11, 13:52    [10932016]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Ken@t
MrBlackJack,

case, pivot


Ken@t, спасибо, с pivot разобрался, работает, отображает все как надо...
6 июл 11, 13:57    [10932063]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
bacalavr
Member

Откуда:
Сообщений: 311
iap
Критик
функции year, month + group by
Лучше
GROUP BY DATEDIFF(MONTH,0,[date])

а чем лучше?
6 июл 11, 15:20    [10932938]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Как я писал выше, с использованием Pivot все работает.
Но сейчас попробовал через case сделать тоже самое...

declare @Temp table (id int, ddate date, Summa int)

insert into @Temp
values
(1,'2010-02-01', 25),
(1,'2010-02-02', 26),
(1,'2010-02-03', 27),
(1,'2010-03-01', 28),
(1,'2010-03-02', 29),
(1,'2010-03-03', 30)

--С использованием Pivot
/*
select id, [2] as Feb, [3] as Mar
from
(
select id, MONTH(ddate) as Mon, Summa from @Temp
) as P
PIVOT
(
Sum(Summa) for Mon in ([2],[3])
) as C
*/
----С использованием Pivot

---Case
select id,
case when MONTH (ddate) = 2 then SUM(summa) else 0 end as SumFeb,
case when MONTH (ddate) = 3 then SUM(summa) else 0 end as SumNov
from @Temp
group by id, Month(ddate)
--Case

В результате вот что получается

id SumFeb SumNov
1 78 0
1 0 87

Вопрос, как привести их к одной строке?
6 июл 11, 15:50    [10933277]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
Anddros
Member

Откуда:
Сообщений: 1077
select id, 
sum(case when MONTH (ddate) = 2 then summa else 0 end) as SumFeb,
sum(case when MONTH (ddate) = 3 then summa else 0 end) as SumNov
from @Temp
group by id
6 июл 11, 16:00    [10933376]     Ответить | Цитировать Сообщить модератору
 Re: Разбиение и группировка по месяцам  [new]
MrBlackJack
Member

Откуда:
Сообщений: 43
Anddros
select id, 
sum(case when MONTH (ddate) = 2 then summa else 0 end) as SumFeb,
sum(case when MONTH (ddate) = 3 then summa else 0 end) as SumNov
from @Temp
group by id


Огромное спасибо, работает!
6 июл 11, 16:03    [10933402]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить