比较具有不同值的行中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
灿你帮我?
答
取决于如果你只有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
它被称为数据透视表。如果您拥有不确定数量的列,那么它就是一个动态数据透视表,几个SQL服务器示例已经存在于堆栈中。 – xQbert
可能重复的[SQL Server动态PIVOT查询?](http://*.com/questions/10404348/sql-server-dynamic-pivot-query) – xQbert