2010-12-08 28 views
6

J'ai la situation ci-dessous (disons tblRecord)Impossible d'utiliser la clause ORDER BY avec pour le chemin xml correctement (serveur Sql)

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

J'ai besoin que la sortie soit

ID Data 
1 two thousand five hundred and seventy nine 

Je la ci-dessous requête

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 

Mais la sortie est

ID Data 
1 five hundred two thousand and seventy nine 

Besoin d'aide pour cela.

Merci

Répondre

10

Essayez ceci:

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 

Votre premier problème a été le ORDER BY t1.RowNum dans la sélection intérieure - doit être ORDER BY t2.RowNum à la place. Deuxièmement: cette condition de jointure where t2.RowNum= t1.RowNum n'est pas nécessaire et provoque des problèmes. Et troisièmement: le GROUP BY n'est encore ni nécessaire ni utile - il suffit d'utiliser le SELECT DISTINCT pour réaliser ce que vous cherchez.

Également - vous ne savez pas pourquoi vous lancez Data en tant que VARCHAR (MAX) ???

+0

A travaillé comme un charme! – rvphx