【问题标题】:Convert row data into column in SQL在 SQL 中将行数据转换为列
【发布时间】:2017-11-24 20:53:26
【问题描述】:

我想将数据转换为表头,表头作为行如何转换?

这里是示例数据,请执行这条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         |
+-------------------------+--------+--------+--------+--------+------------+

是否可以在单个查询中将 MyData 转换为特定格式(参考图片)?

【问题讨论】:

  • 你试过在sql server中使用pivot吗?

标签: sql-server pivot common-table-expression


【解决方案1】:

如果您的列和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

这是此查询的输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多