我有两张桌子。
Food Table
--------------------------
ID CityID FoodName
--------------------------
1 1 FoodA
2 1 FoodB
3 1 FoodC
4 2 FoodW
5 2 FoodX
6 2 FoodY
7 2 FoodZ
City Table
--------------------------
ID CityName
--------------------------
1 Memphis
2 Nashville
3 Chattanooga
那么如何使用 CityName 作为列标题并列出该城市的食物。
--------------------------------------
Memphis Nashville Chattanooga
--------------------------------------
FoodA FoodW
FoodB FoodX
FoodC FoodY
FoodZ
我很确定我必须使用枢轴,但我还没找到一个好的解决方案。 这是我到目前为止所取得的成就。
SELECT *
FROM (
SELECT *
FROM Food F
INNER JOIN City C ON C.ID = F.CityID
) DataTable D
PIVOT(F.FoodName FOR C.CityName IN (
[Memphis]
,[Nashville]
,[Chattanooga]
)) PivotTable
答案 0 :(得分:1)
您可以使用此查询来获取输出。实际上你在设置数据透视查询时犯了一些错误。
select Memphis,Nashville,Chattanooga
from
(
select f.ID,c.CityName,f.FoodName
from Food f
inner join City c
on f.CityID=c.id
)result
pivot
(
max(FoodName)
for CityName in(Memphis,Nashville,Chattanooga)
) as pvt
答案 1 :(得分:0)
PIVOT
运算符使用数据表中PIVOT
定义中不属于GROUP
锚点的列。
这意味着当两个值在数据表的列中具有相同的值时,它们将位于PIVOT
表的同一行中,这些值既不是聚合的,也不是聚合的。
OP数据不具有此值,因此会生成新的分区ID。
SELECT Memphis, Nashville, Chattanooga
FROM (SELECT c.CityName, f.FoodName
, FoodID = Row_Number() OVER (PARTITION BY c.ID ORDER BY FoodName)
FROM Food f
INNER JOIN City c ON f.CityID = c.id) d
PIVOT
(MAX(FoodName) FOR CityName IN (Memphis,Nashville,Chattanooga)) pvt