2014-01-15 8 views
0

Я новичок в 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 отличается от предыдущей записи. Любая помощь будет принята с благодарностью. Спасибо!

Уильям Харли

+0

Что такое ваша СУБД? и вам нужны все реестры с суммарной суммой или просто суммой?! –

+0

Я использую SQL Server Management Studios – YepItsMe

+0

Какая версия SQL Server? –

ответ

0

Не 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 
+0

Спасибо за быстрый ответ. К сожалению, я не думаю, что оператор SUM можно использовать таким образом. См. Сообщение об ошибке: Msg 8117, уровень 16, состояние 1, строка 2 Тип оператора данных varchar недействителен для оператора сумм. – YepItsMe

+0

Мне действительно нужно общее количество, основанное на аналогичных позициях поля определенного столбца в одной таблице. Поэтому для instacne, если есть два продукта с одинаковым номером продукта, добавьте общее количество. Однако не добавляйте итоговые значения для продуктов с разными номерами продуктов. – YepItsMe

+0

1) вам нужно наложить свой столбец varchar на числовой, чтобы суммировать его. Например, 'SUM (CAST (ThisNumber as Numeric))' 2) Я понятия не имею, что вы подразумеваете под номером продукта, вы не указали это в своем исходном вопросе - это столбец, который вы не указали, что хотите сумма для? затем измените «PARTITION BY ProcedureID» на «PARTITION BY whatevercolumnyouant». – Hogan

0

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; 

В более ранних версиях, вам нужно использовать коррелированный подзапрос или присоединиться к агрегации.

Между прочим, нет очевидного порядка для строк. Если вы делаете кумулятивную сумму, у вас должен быть столбец, определяющий порядок.

+0

Спасибо Гордон. Я использую SSMS 08. Не уверен, как выполнить подзапрос или агрегацию. Еще новичок. благодаря – YepItsMe

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