我需要转换以下数据(为了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命令是否有一些语法可以帮助我实现这一目标,或者我是否需要更具动态性的东西。
提前致谢
答案 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
。