输入:表 A
company | name | rank
---------------------------
ABC | Tom | 1
ABC | Harry | 3
ABC | Robert | 2
DEF | Chris | 2
DEF | Dwayne | 1
输出:表 B
company | names | ranks
--------------------------------------------
ABC | Tom, Harry, Robert | 1,3,2
DEF | Chris, Dwayne | 2,1
--------------------------------------------
我想在列name
和{{}中的表 A 中逐行连接rank
和company
(基于names
)表 B 中的1}}对于表 B 中的每一行,ranks
中的名称顺序对应{{1}中的排名顺序}。
我正在使用下面的T-SQL查询(试一试here):
names
这可以优化为只使用一个ranks
SELECT DISTINCT company,
(SELECT name + ','
FROM A as t2
WHERE t2.company = t1.company
ORDER BY rank
FOR XML PATH('')) as names,
(SELECT CAST(rank AS VARCHAR) + ','
FROM A as t2
WHERE t2.company = t1.company
ORDER BY rank
FOR XML PATH('')
) as ranks
FROM A as t1;
和SELECT
而不是上面使用的两个names
吗?
编辑:
使用递归CTE (试一试here):
ranks