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

Откуда:
Сообщений: 22
Добрый День! Подскажите как написать часть вьюхи.
имеется таблица t1(datetime, int, int) вида:

date kol flag
21.02.2012 01:01:0111
21.02.2012 02:01:0140
21.02.2012 03:01:0131
22.02.2012 04:01:0191
22.02.2012 06:01:0141
23.02.2012 01:01:0150
23.02.2012 01:01:0120
23.02.2012 01:01:0180
24.02.2012 01:01:0170
24.02.2012 01:01:0191


Задача такова: просуммировать значения kol (только те, у которых flag == 1) для каждой из дат.

результатом должно быть

daysum
21.02.20124
22.02.201213
23.02.20120
24.02.20129


мой вариант:
автор
CREATE VIEW v1 (day, sum) 
AS SELECT 
CAST(t1.date AS DATE), 
SUM (CASE WHEN t1.flag = 1 THEN t1.kol ELSE 0 END) 
FROM t1 GROUP BY day


Суммирует с условием для каждой строчки. А мне надо для каждой даты. Что необходимо изменить?
25 сен 12, 13:50    [13218703]     Ответить | Цитировать Сообщить модератору
 Re: sql view: суммирование данных по дате, с условием  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
kabee,

наверное сделать объект группировки?
GROUP BY convert(int,day)
25 сен 12, 14:08    [13218893]     Ответить | Цитировать Сообщить модератору
 Re: sql view: суммирование данных по дате, с условием  [new]
kabee
Member

Откуда:
Сообщений: 22
WarAnt,

Таким образом?
CREATE VIEW v1 (day, sum) 
AS SELECT 
CAST(t1.date AS DATE), 
SUM (CASE WHEN t1.flag = 1 THEN t1.kol ELSE 0 END) 
FROM t1 GROUP BY  CONVERT(int,day) 

пишет: запрос некорректен.

может использовать каким-то образом DISTINCT ?
25 сен 12, 14:20    [13219004]     Ответить | Цитировать Сообщить модератору
 Re: sql view: суммирование данных по дате, с условием  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
WarAnt
kabee,

наверное сделать объект группировки?
GROUP BY convert(int,day)
Лучше GROUP BY CAST([date] AS DATE) для >=SQL2008
или GROUP BY DATEADD(DAY,DATEDIFF(DAY,0,[date]),0) для <SQL2008

Ибо где гарантия, что преобразование в INT всегда будет эквивалентом даты без времени?

И WHERE flag=1
25 сен 12, 14:23    [13219036]     Ответить | Цитировать Сообщить модератору
 Re: sql view: суммирование данных по дате, с условием  [new]
kabee
Member

Откуда:
Сообщений: 22
WarAnt, iap, Спасибо заработало с
GROUP BY CAST([date] AS DATE)

Не могли бы пояснить как это повлияло на процесс выполнения запроса.
Результат что надо, но немного непонятно как он сработал.

и еще тогда в догонку:
Добавил во вьюшку еще один столбец ( который суммирует с flag == 0 )
Как реализовать следующий столбец, который считает, например, произведение 2х предыдущих ( sum1 и sum0 )

CREATE VIEW v1 (day, sum1, sum0, mult) 
AS SELECT 
CAST(t1.date AS DATE), 
SUM (CASE WHEN t1.flag = 1 THEN t1.kol ELSE 0 END) 
SUM (CASE WHEN t1.flag = 0 THEN t1.kol ELSE 0 END) 
??? 
FROM t1 GROUP BY CAST([date] AS DATE)
25 сен 12, 14:38    [13219157]     Ответить | Цитировать Сообщить модератору
 Re: sql view: суммирование данных по дате, с условием  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
kabee
WarAnt, iap, Спасибо заработало с
GROUP BY CAST([date] AS DATE)

Не могли бы пояснить как это повлияло на процесс выполнения запроса.
Результат что надо, но немного непонятно как он сработал.



почитайте основы sql там всё просто, в кратце, вы создали в датасете поле (CAST(t1.date AS DATE)) по которому сиквел может агрегировать нужные вам значения GROUP BY CAST([date] AS DATE).

автор
и еще тогда в догонку:
Добавил во вьюшку еще один столбец ( который суммирует с flag == 0 )
Как реализовать следующий столбец, который считает, например, произведение 2х предыдущих ( sum1 и sum0 )

CREATE VIEW v1 (day, sum1, sum0, mult) 
AS SELECT 
CAST(t1.date AS DATE), 
SUM (CASE WHEN t1.flag = 1 THEN t1.kol ELSE 0 END) 
SUM (CASE WHEN t1.flag = 0 THEN t1.kol ELSE 0 END) 
??? 
FROM t1 GROUP BY CAST([date] AS DATE)


нарастающий итог?
25 сен 12, 15:38    [13219645]     Ответить | Цитировать Сообщить модератору
 Re: sql view: суммирование данных по дате, с условием  [new]
kabee
Member

Откуда:
Сообщений: 22
WarAnt, благодарю, разобрался. Все действительно проще чем мне казалось. Подсчет суммы реализовал, вопрос отпадает.
25 сен 12, 16:13    [13219905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить