在SQL查询中对表进行水平演示

时间:2019-03-27 03:35:52

标签: sql sql-server sql-server-2012

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

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

3 个答案:

答案 0 :(得分:2)

您可以像下面这样使用条件聚合来编写查询。

float randomNumber      = (rand() / (float)RAND_MAX) * 187.5
bool encountedPokemon1  = randomNumber < 1 * encounter_rate_first_pokemon
bool encountedPokemon2  = randomNumber < 1 * encounter_rate_second_pokemon

如果愿意,您也可以像下面这样使用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

Online Demo

答案 1 :(得分:1)

SQL Server Pivot功能可用于实现此目的。使用以下查询:

  

借助Pivot,您可以汇总结果并进行转换   行成列

样品表和测试数据

declare @ItemTable  table
(ITEM int, Price int, Location varchar(20))

insert into @ItemTable
(ITEM,    Price,   Location)
values
(1   ,    10  ,    'North'),
(1  ,     20   ,   'South'),
(2  ,     10   ,   'North'),
(2  ,     20   ,  'South'),
(3  ,     20  ,    'North'),
(3  ,     20  ,    'South')

查询

SELECT ITEM, North,South
FROM   @ItemTable 
 PIVOT  
(SUM(Price) FOR Location IN (North,South))tab  
ORDER BY ITEM 

答案 2 :(得分:0)

表的结构不正确。您必须重新制作表或将列名称更改为ITEM,NORTH,SOUTH。目前,您的表格列是ITEM,PRICE,LOCATION,因此很显然,它们会像这样显示,您可以使用前端编码使它看起来像您想要的样子,但结构仍然不正确。