我有一个简单的 2 列表(varchar):
name |occupation
___________________
Sandra |Medic
Julija |Actor
Marija |Actor
Martyna |Manager
Aiste |Teacher
Kristina|Teacher
Virg |Teacher
Jurga |Actor
Justina |Medic
Mia |Manager
我需要构建一个看起来像这样的数据透视表:
Medic | Actor | Teacher | Manager |
____________________________________
Justina| Julija| Aiste | Martyna
Sandra | Marija| Kristina| Mia
null | Jurga | Virg | null
我编写了这段代码来返回构建枢轴:
SELECT *
FROM (
SELECT
[name],
[occupation]
FROM employee
) as Results
PIVOT (
max([name])
FOR [occupation]
IN (
[Medic],
[Actor],
[Teacher],
[Manager]
)
) AS PivotTable
但结果我只得到一行:
Medic |Actor |Teacher |Manager
Sandra Marija Virginija Mia
我在哪里做错了?我也无法理解哪种聚合函数更适用,因为行仅包含文本(varchar)。
当您使用 a 时,
PIVOT
您正在聚合数据,并且由于您正在使用MAX()
,您只能为每个新列返回一个值。为了在每列中返回多行,您需要某种值来强制 SQL 返回多行。您可以通过使用像row_number()
.样本数据
如果您添加
row_number()
并查询以下内容:您将返回以下数据:
通过添加 row_number 您有另一列,您正在使用该
PIVOT
函数进行分组,因此您的最终查询实际上将变为:这将返回您想要的结果: