2010-07-08 56 views
1

我有一个表连接具有顺序保留

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

如果您要订购,你需要告诉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 
+0

这是很好的先生..还有1个问题。通常在子查询中,我们不能按子句写顺序。 SQL服务器报告错误(据我所知..请纠正我,如果我错了)。那么为什么它在这种情况下工作? – learner 2010-07-08 06:14:34

+0

@learner:我不知道为什么ORDER BY不应该在子查询中工作 - 谨慎地展示一个具体的例子? – 2010-07-08 06:30:14