SQL 将 table 列转换为行

SQL Pivot table columns to rows

我正在尝试转换这个 table:

Date     |Col1    |Col2 |Col3|Col4|Col5|Col6|Col7|Col8

2/15/2015|Product1|MTD  |1   |2   |3   |4   |5   |6

2/15/2015|Product1|QTD  |11  |22  |33  |44  |55  |66

2/15/2015|Product1|YTD  |111 |222 |333 |444 |555 |666 

对此:

Date     |Col1    |Type|MTD|QTD|YTD

2/15/2015|Product1|Col3|1  |11 |111

2/15/2015|Product1|Col4|2  |22 |222

2/15/2015|Product1|Col5|3  |33 |333

2/15/2015|Product1|Col6|4  |44 |444

2/15/2015|Product1|Col7|5  |55 |555

2/15/2015|Product1|Col8|6  |66 |666

使用 sql 查询。 任何帮助将不胜感激

可以通过很多联合来完成。

select MTD.date,MTD.col1,MTD.type,MTD.val as MTD,QTD.val as QTD,YTD.val as YTD 
from(
    select 'col3' type,date,col1,col3 as val from yourtable where col2 = 'MTD'
    union all
    select 'col4' type,date,col1,col4 from yourtable where col2 = 'MTD'
    union all
    select 'col5' type,date,col1,col5 from yourtable where col2 = 'MTD'
    union all
    select 'col6' type,date,col1,col6 from yourtable where col2 = 'MTD'
    union all
    select 'col7' type,date,col1,col7 from yourtable where col2 = 'MTD'
    union all
    select 'col8' type,date,col1,col8 from yourtable where col2 = 'MTD'
) MTD inner join (
    select 'col3' type,date,col1,col3 as val from yourtable where col2 = 'QTD'
    union all
    select 'col4' type,date,col1,col4 from yourtable where col2 = 'QTD'
    union all
    select 'col5' type,date,col1,col5 from yourtable where col2 = 'QTD'
    union all
    select 'col6' type,date,col1,col6 from yourtable where col2 = 'QTD'
    union all
    select 'col7' type,date,col1,col7 from yourtable where col2 = 'QTD'
    union all
    select 'col8' type,date,col1,col8 from yourtable where col2 = 'QTD'
) QTD on MTD.date = QTD.date and MTD.col1 = QTD.col1 and MTD.type = QTD.type
inner join (
    select 'col3' type,date,col1,col3 as val from yourtable where col2 = 'YTD'
    union all
    select 'col4' type,date,col1,col4 from yourtable where col2 = 'YTD'
    union all
    select 'col5' type,date,col1,col5 from yourtable where col2 = 'YTD'
    union all
    select 'col6' type,date,col1,col6 from yourtable where col2 = 'YTD'
    union all
    select 'col7' type,date,col1,col7 from yourtable where col2 = 'YTD'
    union all
    select 'col8' type,date,col1,col8 from yourtable where col2 = 'YTD'
) YTD on MTD.date = YTD.date and MTD.col1 = YTD.col1 and MTD.type = YTD.type