记录一下sqlserver的pivot(行转列)的应用,及遇到的数据无法合并的问题。
基础语法
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>,
...
[last pivoted column] AS <column name>
FROM
(<SELECT query that produces the data>)
AS <alias for the source query>
PIVOT
(
<aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
IN ( [first pivoted column], [second pivoted column],
... [last pivoted column])
) AS <alias for the pivot table>
<optional ORDER BY clause>;
pivot合并的数据必须是除了pivot里面指定的列外,其他列的数据都是相同的。
测试数据如下
代码如下
select [PId],[Field_A] as A,[Field_B] as B,[Field_C] as C,[CreateTime] from
(
select [PId]
,[Name]
,[Value]
,[CreateTime]
from [T_Test]
) as tt
pivot(max(tt.[Value]) for tt.[Name] in ([Field_A],[Field_B],[Field_C])) as temp
order by [CreateTime]
执行效果如下
数据没有合并
代码如下
select [PId],[Field_A] as A,[Field_B] as B,[Field_C] as C,[CreateTime] from
(
select [Id]
,[PId]
,[Name]
,[Value]
,[CreateTime]
from [T_Test]
) as tt
pivot(max(tt.[Value]) for tt.[Name] in ([Field_A],[Field_B],[Field_C])) as temp
order by [CreateTime]
执行代码发现数据是多行的,并没有合并起来
如图
是什么原因导致数据没有合并?
原因就在于[T_Test]的[Id],因为他每条数据都是不同的,所以导致数据无法合并。
过滤掉[Id]字段后就可以合并数据。