我正在尝试将表格转换为可以使用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次。
答案 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
)