需要Pivot /动态SQL帮助

时间:2015-06-30 12:26:12

标签: tsql pivot dynamic-sql

我需要转换以下数据(为了SO的目的而简化): -

DataTitle   DataValue   Id
==============================
Thing 1     Data 1      12345
Thing 2     Data 2      12345
Thing 3     Data 3      12345
Thing 4     Data 4      12345
Thing 1     Data 5      23456
Thing 2     Data 6      23456
Thing 3     Data 7      23456
Thing 4     Data 8      23456

进入: -

ID      Thing1    Thing2    Thing3    Thing4
==============================================
12345   Data1     Data2     Data3     Data4
23456   Data5     Data6     Data7     Data8

基本上需要按ID分组,然后针对每个' Thing'然后我需要一个专栏。为了这个例子的好处,总会有相同数量的“事物”。在表格中,列数不会发生变化。我不能在这个阶段改变起始表结构,所以很遗憾,解决方案不能重新考虑表设计...

我已经看过使用PIVOT来解决这个问题,但由于我没有汇总数据,所以我真的卡住了..

PIVOT命令是否有一些语法可以帮助我实现这一目标,或者我是否需要更具动态性的东西。

提前致谢

1 个答案:

答案 0 :(得分:1)

如果你只是要拥有相同的4件事,你可以使用这样的查询来产生你的输出:

CREATE TABLE #DemoTable (DataTitle VARCHAR(10), DataValue VARCHAR(10), Id INT)

INSERT INTO #DemoTable (DataTitle, DataValue, Id) VALUES ('Thing 1', 'Data 1', '12345'),('Thing 2', 'Data 2', '12345'),('Thing 3', 'Data 3', '12345'),('Thing 4', 'Data 4', '12345'),('Thing 1', 'Data 5', '23456'),('Thing 2', 'Data 6', '23456'),('Thing 3', 'Data 7', '23456'),('Thing 4', 'Data 8', '23456')

SELECT  DISTINCT
        dt.Id,
        dt1.DataValue AS Thing1,
        dt2.DataValue AS Thing2,
        dt3.DataValue AS Thing3,
        dt4.DataValue AS Thing4
  FROM  #DemoTable dt
    INNER JOIN #DemoTable dt1 ON dt1.Id = dt.Id AND dt1.DataTitle = 'Thing 1'
    INNER JOIN #DemoTable dt2 ON dt2.Id = dt.Id AND dt2.DataTitle = 'Thing 2'
    INNER JOIN #DemoTable dt3 ON dt3.Id = dt.Id AND dt3.DataTitle = 'Thing 3'
    INNER JOIN #DemoTable dt4 ON dt4.Id = dt.Id AND dt4.DataTitle = 'Thing 4'

DROP TABLE #DemoTable

这有效地在您的Id列上展开,并在四个输出列中为每个DataValue获取thing