2017-06-21 21 views
0

我想將數據轉換爲表頭的頭部,並將頭部轉換爲行如何轉換?將行數據轉換爲SQL中的列

這裏是樣本數據,請執行此SQL

DECLARE @MyData table( 
DateValue datetime, 
Value1 int, 
Value2 int, 
Value3 int, 
Value4 int, 
ColumnData Varchar(10)); 

INSERT INTO @MyData(DateValue,Value1,Value2,Value3,Value4,ColumnData) 
VALUES('12/1/2016',10,20,30,40,'D1') 

INSERT INTO @MyData(DateValue,Value1,Value2,Value3,Value4,ColumnData) 
VALUES('12/1/2016',11,21,31,41,'D2') 

INSERT INTO @MyData(DateValue,Value1,Value2,Value3,Value4,ColumnData) 
VALUES('12/1/2016',12,22,32,42,'D3') 

SELECT * FROM @MyData 

+-------------------------+--------+--------+--------+--------+------------+ 
|  DateValue  | Value1 | Value2 | Value3 | Value4 | ColumnData | 
+-------------------------+--------+--------+--------+--------+------------+ 
| 2016-12-01 00:00:00.000 |  10 |  20 |  30 |  40 | D1   | 
| 2016-12-01 00:00:00.000 |  11 |  21 |  31 |  41 | D2   | 
| 2016-12-01 00:00:00.000 |  12 |  22 |  32 |  42 | D3   | 
+-------------------------+--------+--------+--------+--------+------------+ 

它可以是可能邁德特轉換成特定格式(參見圖片)在單個查詢?

enter image description here

+0

您是否嘗試過在數據庫中使用數據透視表? – scsimon

回答

0

如果你的列和columnData是靜態的,你可以單獨轉動每個值,然後使用UNION ALL創建一個表:

DECLARE @MyData table(DateValue datetime, Value1 int, Value2 int, Value3 int, Value4 int, ColumnData Varchar(10)); 
INSERT INTO @MyData(DateValue,Value1,Value2,Value3,Value4,ColumnData) VALUES('12/1/2016',10,20,30,40,'D1') 
INSERT INTO @MyData(DateValue,Value1,Value2,Value3,Value4,ColumnData) VALUES('12/1/2016',11,21,31,41,'D2') 
INSERT INTO @MyData(DateValue,Value1,Value2,Value3,Value4,ColumnData) VALUES('12/1/2016',12,22,32,42,'D3') 

select 'Value1' as '12/1/2016',*, D1 + D2 + D3 as [Total] from(
     SELECT Value1, ColumnData FROM @MyData 
    ) s 
    pivot(
     sum(Value1) for ColumnData in (D1, D2 , D3) 
    ) as pvt 
union all 
    select 'Value2' as '12/1/2016',*, D1 + D2 + D3 as [Total] from(
     SELECT Value2, ColumnData FROM @MyData 
    ) s 
    pivot(
     sum(Value2) for ColumnData in (D1, D2 , D3) 
    ) as pvt 
union all 
    select 'Value3' as '12/1/2016',*, D1 + D2 + D3 as [Total] from(
     SELECT Value3, ColumnData FROM @MyData 
    ) s 
    pivot(
     sum(Value3) for ColumnData in (D1, D2 , D3) 
    ) as pvt 
union all 
    select 'Value4' as '12/1/2016',*, D1 + D2 + D3 as [Total] from(
     SELECT Value4, ColumnData FROM @MyData 
    ) s 
    pivot(
     sum(Value4) for ColumnData in (D1, D2 , D3) 
    ) as pvt 

這是此查詢的輸出:

enter image description here