将多行数据组合在一行中

时间:2012-09-17 14:32:42

标签: sql sql-server sql-server-2008-r2 pivot

我正在尝试将表格转换为可以使用Excel更容易操作的视图。我在Sql Server中创建视图,可以由会计部门读取,以便在Excel中创建统计信息和其他跨表格。

目前格式的表格

OccupationId | ProductId | IsGroup | IsAdditionalNight | Price
-------------+-----------+---------+-------------------+------
1            | 47        | 0       | 0                 | 50
2            | 47        | 0       | 1                 | 45
3            | 47        | 1       | 0                 | 30
4            | 47        | 1       | 1                 | 28

我要公开的视图格式

ProductId | Price | AdditionalNight | GroupPrice | GroupAdditionalNight
----------+-------+-----------------+------------+---------------------
47        | 50    | 45              | 30         | 28

如何在Sql Server 2008 R2中实现这一目标?我需要查询速度快,因为它将成为更大的Query(使用CTE)的一部分。

目前我想的唯一方法是包含4个子查询以单独获得所有4个价格,但我不喜欢这种方法并且它扫描表4次。

1 个答案:

答案 0 :(得分:3)

SELECT ProductId,
MAX(CASE 
 WHEN IsGroup=0 AND IsAdditionalNight =0 then Price
 END) as [Price],
MAX(CASE 
 WHEN IsGroup=0 AND IsAdditionalNight =1 then Price
 END) as [AdditionalNight],
MAX(CASE 
 WHEN IsGroup=1 AND IsAdditionalNight =0 then Price
 END) as [GroupPrice],
MAX(CASE 
 WHEN IsGroup=1 AND IsAdditionalNight =1 then Price
 END) as [GroupAdditionalNight] 

 FROM table1     
GROUP BY ProductId

或者您可以使用PIVOT执行相同操作(我个人认为PIVOT的语法比上面的方法更复杂,但没有性能差异,有些人更喜欢PIVOT