我有一张桌子
tblSomeData
OrderOccurance ID Data
-------------- -- ----
1 1 HTMedia
2 1 Hedge
3 1 Bowing
4 1 FonWirelessLtd
第一栏“OrderOccurance”表示元素,即数据将出现在最终输出中的顺序
预期输出将是
ID Data
-- -----
1 HTMedia,Hedge,Bowing,FonWirelessLtd
我已完成以下计划
Select
ID
, Data = stuff((Select ',' + Cast(Data As Varchar(20)) From tblSomeData t2
Where t2.ID = t1.ID for xml path('')),1,1,'')
From tblSomeData t1
Group by t1.ID
我的输出为
ID Data
-- -----
1 Bowing,FonWirelessLtd,Hedge,HTMedia
似乎FOR XML PATH()自行排序然后执行连接。
如何带来预期的输出。
我正在使用SQL Server 2005。
由于
答案 0 :(得分:1)
如果要订购,则需要告诉SQL Server要订购的列 - 在当前查询中,您没有任何ORDER BY
子句。只需添加即可,您应该没问题:
SELECT
ID,
Data = STUFF(
(SELECT ',' + CAST(Data As VARCHAR(20))
FROM dbo.tblSomeData t2
WHERE t2.ID = t1.ID
ORDER BY OrderOccurance
FOR XML PATH('')), 1, 1, '')
FROM
dbo.tblSomeData t1
GROUP BY
t1.ID