2010-11-15 4 views
1

У меня есть отчет SSRS, и я пытаюсь суммировать строки условно. У меня есть:Группировка и суммирование элементов в таблице с использованием SSRS

11/15/2010 12:14:43 AM | Текущая ставка | Текущая скорость | Сумма используется в этой минуты (скорость * Тариф/60) и т.д. и т.д. и т.п.

Я пытаюсь добавить все строки, которые произошли в течение часа, так что мой доклад будет показывать:

11/15/2010 | 12 AM - 1 AM | Сумма, использованная в этот час (скажем, 7 галлонов)

Я не могу найти нигде, как условно подытожить строку в час или как заставить мой отчет сказать выше.

Спасибо заранее!

+0

Вы пытаетесь сделать это в отчете по сравнению с оператором SQL? –

+0

Да, в отчете. Я надеялся использовать функцию Expression для этого. – Sarah

+0

Я согласен с OMG Ponies, это было бы проще сделать в SQL, а затем представить результат в отчет (возможно, быстрее). Вы говорите, что вы «... надеясь использовать функцию« Выражение »...», можете ли вы объяснить, почему вы предпочитаете этот метод? – Tony

ответ

0

Используя следующую таблицу для тестирования:

CREATE TABLE `log` (
    `entry_date` datetime DEFAULT NULL, 
    `amount_used` int(11) DEFAULT NULL 
) 

С некоторыми тестовых данных:

entry_date   amount_used 
2010-11-01 10:00:00, 3 
2010-11-01 10:30:00, 1 
2010-11-01 11:00:00, 6 

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

SELECT DATE(entry_date) AS entry_date, 
    CONCAT_WS('-',CONVERT(MIN(HOUR(entry_date)), char(2)), CONVERT(MAX(HOUR(entry_date)),CHAR(2))) hours, 
    SUM(amount_used) amount_used 
FROM (
    SELECT entry_date, SUM(amount_used) AS amount_used 
    FROM log 
    GROUP BY DATE(entry_date), HOUR(entry_date) 
    ) T; 

Весь материал CONCAT/CONVERT - это просто набор часов в этот конкретный день, нг. Это результат:

entry_date hours amount_used 
2010-11-01, 10-11, 10 
+0

Спасибо тебе большое, Тони, это очень помогло мне! – Sarah

+0

Я создал новый набор данных и вставил запрос, изменив имена на те, что были в моем db. Однако, когда я пытаюсь выполнить запрос, я получаю, что «DATE» не является признанным встроенным именем функции. Любая идея, почему это может быть? – Sarah

+0

Используете ли вы SQL Server? На данный момент у меня есть только MYSQL. Чтобы перейти на T-SQL, замените функцию HOUR на DATEPART (HOUR, entry_date). Чтобы получить только DATE из DATETIME в T-SQL, вам нужно сделать довольно неприятный взлом, используя что-то вроде этого: CAST (FLOOR (CAST (GETDATE() AS FLOAT)) AS DATETIME) – Tony

Смежные вопросы