首页 > 解决方案 > 在 SQL Query 中进行表的水平表示

问题描述

我有每个位置价格的项目表。

Select Item, Price, location from ItemTable Order by Item, Location

这是结果集

ITEM    Price   Location
1       10      North
1       20      South
2       10      North
2       20      South
3       20      North
3       20      South

我想让最终结果集的呈现水平按项目分组。预期的结果将是这样的

Item    North   South
1       10      20
2       10      20
3       20      20

但我已经完全迷失了。

我正在使用 SQL Server 2014

标签: sqlsql-serversql-server-2012

解决方案


您可以使用条件聚合编写如下查询。

SELECT item, 
       Sum(CASE 
             WHEN location = 'North' THEN price 
             ELSE 0 
           END) AS North, 
       Sum(CASE 
             WHEN location = 'South' THEN price 
             ELSE 0 
           END) AS South 
FROM   ItemTable  
GROUP  BY item 

如果你喜欢你也可以PIVOT像下面这样使用。

SELECT Item, Price, location 
FROM   ItemTable  
       PIVOT(Sum(price) 
            FOR location IN([North], 
                            [South])) pvt 

在线演示


推荐阅读