Как выполнить Pivot, когда GROUP BY применяется к нескольким столбцам в SQL - PullRequest
0 голосов
/ 13 октября 2019

Я знаю, как выполнить выражение Pivot, когда GROUP BY применяется только к одному столбцу с примером кода, упомянутым ниже:

SELECT * FROM   
(
    SELECT 
        category_name, 
        product_id,
        model_year
    FROM 
        production.products p
        INNER JOIN production.categories c 
            ON c.category_id = p.category_id
) t 
PIVOT(
    COUNT(product_id) 
    FOR category_name IN (
        [Children Bicycles], 
        [Comfort Bicycles], 
        [Cruisers Bicycles], 
        [Cyclocross Bicycles], 
        [Electric Bikes], 
        [Mountain Bikes], 
        [Road Bikes])
) AS pivot_table;

В указанном случае GROUP BY применяется только к "category_name"column.

Кто-нибудь знает, как выполнить Pivot в случае, когда Group by собирается применить к нескольким столбцам, например, category_name и model_year?

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Просто используйте условное агрегирование:

select sum(case when category = 'Children Bicycles' and
                     model_year = 2019
                then 1 else 0
           end) as Children_Bicycles_2019,
       sum(case when category = 'Children Bicycles' and
                     model_year = 2018
                then 1 else 0
           end) as Children_Bicycles_2018,
       . . .
from production.products p join
     production.categories c 
     on c.category_id = p.category_id
0 голосов
/ 13 октября 2019

Просто используйте два PIVOT предложения:

PIVOT(
    COUNT(product_id) 
    FOR category_name IN (
        [Children Bicycles], 
        [Comfort Bicycles], 
        [Cruisers Bicycles], 
        [Cyclocross Bicycles], 
        [Electric Bikes], 
        [Mountain Bikes], 
        [Road Bikes])
) AS P1
PIVOT(COUNT(product_id) FOR model_year IN ([2017], [2018], [2019])) AS P2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...