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

Откуда:
Сообщений: 170
Всем привет. Пытаюсь разобраться с Rollup
sql server 2000
Тестовая таблица
USE tempdb;
create table #test
(Data datetime not null, Qty int not null,Summa decimal(10,2) not null)

insert into #test values
('01.01.2013',1,5.0)
insert into #test values
('11.01.2013',1,5.0)
insert into #test values
('21.01.2013',1,5.0)
insert into #test values
('01.02.2013',1,5.0)
insert into #test values
('11.02.2013',1,5.0)
insert into #test values
('01.03.2013',1,5.0)
insert into #test values
('04.03.2013',1,5.0)
insert into #test values
('07.03.2013',1,5.0)
insert into #test values
('01.04.2013',1,5.0)

Мне нужны общий итог по столбцам Qty и Summa, а также промежуточные данные по месяцам. И если с общим итогом всё просто
select data,sum(qty) qty,sum(summa) summa from #test group by data with rollup
то получить промежуточные данные не получается. В идеале должно быть получено при запросе типа
select data,convert(varchar(7),DATA, 102) as period, sum(qty) qty,sum(summa) summa from #test group by data with rollup

2013-01-01 00:00:00.000 2013.01 1 5.00
2013-01-11 00:00:00.000 2013.01 1 5.00
2013-01-21 00:00:00.000 2013.01 1 5.00
NULL 2013.01 3 15.00
2013-02-01 00:00:00.000 2013.02 1 5.00
2013-02-11 00:00:00.000 2013.02 1 5.00
NULL 2013.02 2 10.00
2013-03-01 00:00:00.000 2013.03 1 5.00
2013-03-04 00:00:00.000 2013.03 1 5.00
2013-03-07 00:00:00.000 2013.03 1 5.00
NULL 2013.03 3 15.00
2013-04-01 00:00:00.000 2013.04 1 5.00
NULL 2013.04 1 5.00
NULL NULL 9 45.00

вот только как изменить запрос, чтобы это получить? Надеюсь на помощь.
2 апр 13, 15:29    [14126993]     Ответить | Цитировать Сообщить модератору
 Re: Получение итоговых сумм по месяцам  [new]
Glory
Member

Откуда:
Сообщений: 104751
igr_ok
вот только как изменить запрос, чтобы это получить

Прочитать сообщение об ошибке и исправить group by часть запроса
2 апр 13, 15:33    [14127017]     Ответить | Цитировать Сообщить модератору
 Re: Получение итоговых сумм по месяцам  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select data, period, sum(qty) qty,sum(summa) summa
  from (select data, convert(varchar(7),DATA, 102) as period, qty, summa
          from #test) as t
 group by period, data with rollup
2 апр 13, 15:44    [14127075]     Ответить | Цитировать Сообщить модератору
 Re: Получение итоговых сумм по месяцам  [new]
igr_ok
Member

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

Прочитать сообщение об ошибке и исправить group by часть запроса
Сообщения об ошибке нет. Код рабочий. Собственно, вопрос звучал
igr_ok
вот только как изменить запрос, чтобы это получить?.
2 апр 13, 15:48    [14127106]     Ответить | Цитировать Сообщить модератору
 Re: Получение итоговых сумм по месяцам  [new]
Glory
Member

Откуда:
Сообщений: 104751
igr_ok
Сообщения об ошибке нет. Код рабочий. Собственно, вопрос звучал

Да что вы говорите
вот это запрос

select data,convert(varchar(7),DATA, 102) as period, sum(qty) qty,sum(summa) summa from #test group by data with rollup

у вас работает ?
2 апр 13, 15:50    [14127124]     Ответить | Цитировать Сообщить модератору
 Re: Получение итоговых сумм по месяцам  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
igr_ok
Сообщения об ошибке нет
у меня было
пришлось set dateformat
2 апр 13, 15:50    [14127126]     Ответить | Цитировать Сообщить модератору
 Re: Получение итоговых сумм по месяцам  [new]
igr_ok
Member

Откуда:
Сообщений: 170
Спасибо огромное, Паганель. Всего то и нужно было в группировке столбцы местами поменять, а я не сообразил. Немножко упростил ваш пример
select data,convert(varchar(7),DATA, 102) as period, sum(qty) qty,sum(summa) summa from #test group by convert(varchar(7),DATA, 102),data with rollup

Что касается формата даты, думаю тут дело в настройках SQL Server
2 апр 13, 15:55    [14127160]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить