比较具有不同值的行中TSQL

问题描述:

我使用的是微软服务器2008年,我有这样的一个表:比较具有不同值的行中TSQL

Name | Houre | Value 
Hst1 | 4 | 45 
Hst1 | 5 | 12 
Hst1 | 6 | 88 
Hst2 | 4 | 82 
Hst2 | 5 | 7 
Hst2 | 6 | 12 

我想是这样的:

Name | 4 | 5 | 6 
Hst1 | 45 | 12 | 88 
Hst2 | 82 | 7 | 12 

灿你帮我?

+1

它被称为数据透视表。如果您拥有不确定数量的列,那么它就是一个动态数据透视表,几个SQL服务器示例已经存在于堆栈中。 – xQbert

+0

可能重复的[SQL Server动态PIVOT查询?](http://*.com/questions/10404348/sql-server-dynamic-pivot-query) – xQbert

取决于如果你只有4,5,6你可以做一个有条件的agregation,其他明智的,你需要一个动态的PIVOT

SELECT Name, 
     MAX(CASE WHEN Houre = 4 THEN Value ELSE 0 END) as [4], 
     MAX(CASE WHEN Houre = 5 THEN Value ELSE 0 END) as [5], 
     MAX(CASE WHEN Houre = 6 THEN Value ELSE 0 END) as [6] 
FROM YourTable 
GROUP BY Name 

使用PIVOT

SELECT * 
FROM (
    VALUES ('Hst1', 4, 45), 
     ('Hst1', 5, 12), 
     ('Hst1', 6, 88), 
     ('Hst2', 4, 82), 
     ('Hst2', 5, 7), 
     ('Hst2', 6, 12) 
) t(name, hour, value) 
PIVOT (
    max(value) FOR hour IN ([4], [5], [6]) 
) t