Подсчет итогов по группам
Я новичок в SQL и работаю с ним только около 4 месяцев. Однако мне нужно построить хранимую процедуру, которая может вычислить сумму для одинаковых элементов (используя числовой идентификатор, т. Е. Вычислить сумму E.ThisNumber Where E.ThatNumber = 'Whatever'
)
Вот код, который у меня есть для получения нужных мне записей:
SELECT *
FROM BarRevenueByProcedurePriceInfo
WHERE DeptID = '010.4730'
AND SegmentDateTime = '2013-11-30 00:00:00.000'
ORDER BY ProcedureID
Вот вывод:
ProcedureID/
RowUpdateTime Dept Code E.ThatNumber E.ThisNumber E.WhatIneed
2013-11-30 010.4730 4200028 108.15 108.15
2013-11-30 010.4730 4200028 18.18 126.33
2013-11-30 010.4730 4200028 63.63 189.81
2013-11-30 010.4730 4200069 5.00 5.00
2013-11-30 010.4730 4200069 5.01 10.01
2013-11-30 010.4730 4200069 6.00 16.01
Обратите внимание, как счетчик сбрасывается, когда значение E.ThatNumber отличается от предыдущей записи. Любая помощь будет принята с благодарностью. Спасибо!
Уильям Харли
2 ответа
Не уверен на 100%, что вам нужно, это может быть так:
SELECT *,
SUM(ThisNumber) OVER (PARTITION BY ProcedureID)
FROM BarRevenueByProcedurePriceInfo
WHERE DeptID = '010.4730'
AND SegmentDateTime = '2013-11-30 00:00:00.000'
ORDER BY ProcedureID
SQL Server 2012 поддерживает накопленную сумму как:
SELECT *,
sum(thisnumber) over (partition by procedureId order by (select NULL)) as whatIneed
FROM BarRevenueByProcedurePriceInfo
WHERE DeptID = '010.4730' AND
SegmentDateTime = '2013-11-30 00:00:00.000'
ORDER BY ProcedureID;
В более ранних версиях вам нужно использовать коррелированный подзапрос или объединяться с агрегацией.
Кстати, нет очевидного упорядочения строк. Если вы делаете накопительную сумму, у вас действительно должен быть столбец, в котором указан порядок.