与ORDER PRESERVATION连接

时间:2010-07-08 02:44:59

标签: sql-server-2005

我有一张桌子

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。

由于

1 个答案:

答案 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