Concatenate with ORDER PRESERVATION

て烟熏妆下的殇ゞ 提交于 2019-12-13 02:14:26

问题


I have a table

tblSomeData

    OrderOccurance     ID   Data
    --------------     --   ----
    1                  1    HTMedia
    2                  1    Hedge
    3                  1    Bowing
    4                  1    FonWirelessLtd  

The first column "OrderOccurance" indicates in which order the elements i.e. Data will appear in the final output

The Expected Output will be

ID  Data
--  -----
1   HTMedia,Hedge,Bowing,FonWirelessLtd

I have done the below program

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

I am getting the output as

ID  Data
--  -----
1   Bowing,FonWirelessLtd,Hedge,HTMedia

It seems that, the FOR XML PATH() sorts by itself and then performs the concatenation.

How can I bring the expected output.

I am using SQL Server 2005.

Thanks


回答1:


If you want to order, you need to tell SQL Server what column to order by - in your current query, you don't have any ORDER BY clause. Just add that and you should be fine:

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


来源:https://stackoverflow.com/questions/3200376/concatenate-with-order-preservation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!