我有一张像这样的桌子
==========================
ID | num | person | name
--------------------------
1 | int | int | varchar
2 | int | int | varchar
==========================
其中id - int,主键
num - int,外键。只是一个数字。
person - int,外键。人的内部名称。
name - varchar(30)
我必须得到每个人的id列表,如(ID不是旧ID,我必须为每个人创建新号码并列出“num”)
===============================
ID | person1 | person2 | person3
-------------------------------
1 | num | num | num
2 | num | num | num
===============================
所以我想看看每个人的编号列表
我不知道那里有多少不同的人......请帮助。
答案 0 :(得分:0)
尝试以下查询。由于你不知道人数,所以将它们全部放在两个变量中,一个用于包含别名的select语句,另一个用于包含仅包含人员的pivot。
select @persons = @persons + '[' + A.name + '],'
from table1
select @personsalias = @persons + '[' + A.name + '] as [' + A.name + '],'
from table1
SELECT Id,
@personsalias
FROM
(SELECT Id, num, name
FROM table1) AS SourceTable
PIVOT
(
MAX(num)
FOR name IN (@persons)
) AS PivotTable;