【发布时间】:2015-09-17 06:01:17
【问题描述】:
我需要转换以下数据(为 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 分组,然后对于每个“事物”我都需要一列。为了这个例子的好处,表中总是有相同数量的“事物”,所以列的数量不会改变。在这个阶段我不能改变起始表结构,所以不幸的是解决方案不能重新考虑表设计......
我已经研究过使用 PIVOT 来解决这个问题,但由于我没有汇总数据,所以我真的卡住了..
PIVOT 命令是否有一些语法可以帮助我实现这一点,或者我需要一些更动态的东西。
提前致谢
【问题讨论】:
-
您正在寻找的只是一个动态支点。你在考虑聚合部分。这样想,如果你在只有 1 行时应用 MAX(),它只会返回 1 行(或者你可以使用 MIN,因为它仍然只是聚合 1 行)。您的数据透视语句应类似于:PIVOT (MAX(DataValue) FOR DataTitle IN([Thing 1],[Thing 2],[Thing 3],[Thing 4])) AS pvt跨度>
-
从那里开始动态化很简单。这里有很多关于 SO 和一般 Web 的示例
标签: tsql pivot dynamic-sql