我有带有每个位置价格的项目表。
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
答案 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
答案 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,因此很显然,它们会像这样显示,您可以使用前端编码使它看起来像您想要的样子,但结构仍然不正确。