Создайте запрос для вывода ниже, используя сводную - PullRequest
0 голосов
/ 28 мая 2018

Я хочу повернуть мою таблицу несколькими столбцами, как указано ниже.

Employee_ID ProcessingMonth Amount      FinancialYear
3           April           41668.00    2017
3           June            41668.00    2017
3           March           41668.00    2017
3           May             41668.00    2017
4           April           10037.92    2017
4           June            10037.92    2017
4           March           10037.92    2017
4           May             10037.92    2017

Я хочу получить результат, как показано ниже

Employee_ID year jan feb mar      apr      may      june     jul aug sep oct nov dec
3           2017 0   0   41668.00 41668.00 41668.00 41668.00 0   0   0   0   0   0
4           2017 0   0   10037.92 10037.92 10037.92 10037.92 0   0   0   0   0   0

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Зачем вам хотеть использовать pivot, когда условное агрегирование намного проще:

SELECT Employee_ID,
       SUM(CASE WHEN ProcessingMonth = 'January' THEN Amount ELSE 0 END) as Jan,
       SUM(CASE WHEN ProcessingMonth = 'February' THEN Amount ELSE 0 END) as Feb,
       . . . 
FROM t
GROUP BY Employee_ID, FinancialYear;

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

0 голосов
/ 28 мая 2018

Попробуйте это:

SELECT *
FROM (
    SELECT 
          SUM(Amount) AS sum_amount
        , Employee_ID
        , FinancialYear
        , ProcessingMonth
    FROM your_table
    GROUP BY
          Employee_ID
        , FinancialYear
        , ProcessingMonth
) t
PIVOT (SUM(sum_amount)
    FOR ProcessingMonth IN ( 
        [January], [February], [March], [April], [May], [June], [July], [August], [September], [October], [November], [December])
    ) AS pvt;
...