动态地将行转换为SQL

时间:2015-06-15 19:35:08

标签: sql sql-server sql-server-2008 tsql

我有一个包含以下数据的表格

YYYMMDD   Atest  BTest   CTest

20150525   100    200    300
20150526   110    210    310
20150527   120    220    320 

我需要输出如下

     xyz  20150525  201050526  20150527

    Atest 100       110         120
    BTest 200        210        220
    CTest 300        310        320

我如何实现上述结果集。我的表Dev将会增长,我需要结果集表来动态构建列并根据需要显示数据。 任何帮助表示赞赏。如果你建议枢轴,我可能知道我应该使用哪个字段进行聚合以及如何使用它。感谢。

1 个答案:

答案 0 :(得分:0)

首先,您需要再次移动您的桌子。这是关键的想法:

select * from TableName
unpivot(v for xyz in([Atest],[Btest],[Ctest]))u
pivot(max(v) for yyyymmdd in([20150525],[20150526],[20150527]))p

小提琴http://sqlfiddle.com/#!3/a675c/1

对于动态sql,您可以找到许多示例,说明如何使用STUFF函数在一个字符串中连接不同的日期并构造动态查询。例如T-SQL dynamic pivot