SQL Pivot based on multiple columns

不问归期 提交于 2019-12-27 01:12:04

问题


Hi I am New to SQL Pivoting

I have different requirement where i need to Pivot data based on multiple columns(Q1,Q2,Q3,Q4) based on Categories for Programs. Please advice how can I achieve this?

All examples are based on a single column( eg. SUM(Q1) FOR CategoryID IN ([People], [IT], [Travel])

How do i pivot it based on Q1, Q2, Q3, Q4?

Input

Output


回答1:


In order to get the result that you want you will have to apply both the UNPIVOT and the PIVOT functions.

The unpivot function will convert your Q1, Q2, Q3, and Q4 columns into rows. Once that is done, you will apply the pivot function.

The unpivot code will be similar to this:

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

See SQL Fiddle with Demo. This gives a result:

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

You can see that this query creates a new column name to pivot which has the category value and the quarter name.

Once you have this result, you can apply the pivot function:

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

See SQL Fiddle with Demo. This gives the result:

| 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 |


来源:https://stackoverflow.com/questions/15616547/sql-pivot-based-on-multiple-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!