SQL Pivot и общий итог? - PullRequest
       24

SQL Pivot и общий итог?

0 голосов
/ 27 августа 2018

У меня есть сводная таблица, и я хотел бы знать, как добавить дополнительную строку, которая будет общим итогом, например,

       Christmas,  Hallowen
       500      ,   800
       600      ,   700
Total  1100     ,   1500

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

/*Pivot table */
SELECT *  FROM 
    (SELECT Phase2.[Ref] 
          ,Phase2.[Parties]
          ,Phase2.[TypeOfParty]
          ,Phase2.[Cost]
          ,Phase2.[DressCode]
          ,0  + SUM(Phase2.Cost) OVER (ORDER BY [REF]) AS 'Running Total'
          FROM Stage2) AS BaseData

PIVOT(
    SUM(BaseData.[Cost])
    FOR BaseData.[Parties]
    IN([Christmas], [Halloween])
) AS PivotTable

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

 ,0  + SUM(Phase2.Cost) OVER (ORDER BY [REF]) AS 'Running Total'

В настоящее время мои результаты с текущим пивотом выше:

ref  TypeOfParty,  DressCode Christmas, Halloween, Running Total
1     Christmas,   XmasWear,  500     ,                500
2     christmas,   XmasWear,  500     ,          ,     1000
3     Halloween,   HallWear,          ,  400     ,     400
4     Halloween,   HallWear,          ,  300     ,     700

Если кому-то нужно, чтобы я кое-что прояснил, я здесь.Надеюсь, вам хватит информации, чтобы понять, что я пытаюсь сделать.

1 Ответ

0 голосов
/ 27 августа 2018

Делает ли это то, что вы хотите?

SELECT s.Ref, s.TypeOfParty, s.DressCode,
       SUM(CASE WHEN Parties = 'Christmas' THEN s.cost ELSE 0 END) as Christmas,
       SUM(CASE WHEN Parties = 'Halloween' THEN s.cost ELSE 0 END) as Halloween
FROM Stage2 s
GROUP BY GROUPING SETS ( (s.ref), () );

Это будет включать общую итоговую строку в наборе результатов.

Если вы хотите подвести итоги, вы можете включить отдельный столбец для каждой партии (один столбец не имеет смысла с общей строкой):

SUM(SUM(CASE WHEN Parties = 'Christmas' THEN s.cost ELSE 0 END)) OVER (ORDER BY s.ref) as Christmas,
...