Как реализовать хранимую процедуру для моего случая? - PullRequest
0 голосов
/ 30 октября 2018

Я реализую отчет сводных данных SSRS со следующими записями данных из одной таблицы.

ID         Part                 Type                Value
------------------------------------------------------------
1          Payroll              State Tax           2010
1          Payroll              City Tax             500
1          Payroll              Medical              300
2          Payroll              State Tax           2000
2          Payroll              City Tax             400
3          Payroll              FICA                 200
1          Refund               State Tax           -500
1          Refund               Medical             -100
3          Payroll              FICA                 200
1          Refund               State Tax           -500
1          Refund               Medical             -100

Как реализовать хранимую процедуру для получения следующего результата путем суммирования одинаковых Type значений для каждой детали, чтобы было легко построить отчет SSRS? Большое спасибо!

Type                      Payroll                  Refund                 Total
State Tax                 4010                      -500                  3600
City Tax                  900                        0                    900
FICA                      400                        0                    400
Medical                   300                       -100                  200

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы можете использовать CTE / подзапрос с условной агрегацией как

CREATE PROCEDURE YourProcName
AS
    SET NOCOUNT ON;
    WITH CTE AS
    (
       SELECT Type,
              SUM(CASE WHEN Value > 0 THEN Value ELSE 0 END) payroll,
              SUM(CASE WHEN Value < 0 THEN Value ELSE 0 END) refund
       FROM YourTable
       GROUP BY Type
    )
    SELECT CTE.*,
           CTE.payroll + CTE.refund Total
    FROM CTE;
GO;
0 голосов
/ 30 октября 2018

Вы можете использовать условное агрегирование:

select type,
       sum(case when part = 'Payroll' then value else 0 end) as payroll,
       sum(case when part = 'Refund' then value else 0 end) as refund
from t
group by type;

Зачем вам нужна хранимая процедура, когда простой запрос делает то, что вы хотите? Я бы настоятельно рекомендовал вместо этого представление или табличную функцию.

...