2013-03-25 6 views
-3

Привет Я новичок в SQL поворачивающимисяSQL Pivot на основе нескольких столбцов

У меня есть другое требование, где я должен Сводные данные на основе нескольких столбцов (Q1, Q2, Q3, Q4) на основе категорий для программ. Пожалуйста, совет, как я могу это достичь?

Все примеры основаны на одном столбце (например. SUM (Q1) ДЛЯ CategoryID IN ([Люди], [IT], [Travel])

Как я повернуть его на основе Q1, Q2, Q3, Q4?

Входной

Input

Выход

Result

ответ

2

Для того, чтобы получить результат, который вы хотите, вам нужно будет применить функции UNPIVOT и PIVOT.

UNPIVOT функция преобразует ваши Q1, Q2, Q3 и Q4 столбцы в строки. Как только это будет сделано, вы примените функцию pivot.

UNPIVOT код будет похож на это:

select programid, 
    col + '_'+ category cat_col, 
    value 
from yourtable 
unpivot 
(
    value 
    for col in (Q1, Q2, Q3, Q4) 
) unpiv 

См SQL Fiddle with Demo. Это дает результат:

| PROGRAMID | CAT_COL | VALUE | 
---------------------------------- 
|  366 | Q1_People | 109034 | 
|  366 | Q2_People | 25418 | 
|  366 | Q3_People | 101130 | 
|  366 | Q4_People | 54787 | 

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

После того как вы этот результат, можно применить функцию поворота:

select * 
from 
(
    select programid, 
    col + '_'+ category cat_col, 
    value 
    from yourtable 
    unpivot 
    (
    value 
    for col in (Q1, Q2, Q3, Q4) 
) unpiv 
) d 
pivot 
(
    sum(value) 
    for cat_col in (Q1_People, Q2_People, Q3_People, Q4_People, 
        Q1_IT, Q2_IT, Q3_IT, Q4_IT, 
        Q1_Travel, Q2_Travel, Q3_Travel, Q4_Travel) 
) piv 

См SQL Fiddle with Demo. Это дает результат:

| PROGRAMID | Q1_PEOPLE | Q2_PEOPLE | Q3_PEOPLE | Q4_PEOPLE | Q1_IT | Q2_IT | Q3_IT | Q4_IT | Q1_TRAVEL | Q2_TRAVEL | Q3_TRAVEL | Q4_TRAVEL | 
--------------------------------------------------------------------------------------------------------------------------------------------- 
|  366 | 109034 |  25418 | 101130 |  54787 |  0 |  0 |  0 |  0 |  1195 |  613 |  1113 |  1195 | 
Смежные вопросы