无法正确使用order by子句用于xml路径(Sql server)

时间:2010-12-08 12:16:13

标签: sql-server-2005

我有以下情况(比如tblRecord)

ID RowNum  Data
1 1  and seventy nine
1 2  five hundred
1 3  two thousand

我需要输出

ID   Data
 1   two thousand five hundred and seventy nine

我有以下查询

select ID , Data = 
  ( Select ' ' + cast(Data as varchar(max)) from tblRecord t2
                  where t2.RowNum= t1.RowNum
                  and t2.ID =t1.ID
                  order by t1.RowNum
                  for xml path(''))
from tblRecord t1
group by t1.ID

但输出是

ID  Data
1 five hundred two thousand and seventy nine

需要帮助。

由于

1 个答案:

答案 0 :(得分:12)

试试这个:

SELECT DISTINCT
    ID, Data = (SELECT ' ' + Data 
                FROM dbo.tblRecord t2
                WHERE t2.ID = t1.ID
                ORDER BY t2.RowNum DESC
                FOR XML PATH('')
               )
FROM dbo.tblRecrd t1

您的第一个问题是内部选择中的ORDER BY t1.RowNum - 需要ORDER BY t2.RowNum。其次:此连接条件where t2.RowNum= t1.RowNum不是必需的,会导致问题。第三:GROUP BY既不再需要也不帮助 - 只需使用SELECT DISTINCT来实现您的目标。

另外 - 不确定为什么要将Data转换为VARCHAR(MAX)???