2010-12-08 13 views
6

tengo la situación a continuación (decir tblRecord)No se puede utilizar la cláusula ORDER BY por ruta XML correctamente (SQL Server)

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

necesito que la salida sea

ID Data 
1 two thousand five hundred and seventy nine 

tengo el a continuación consulta

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 

Pero la salida es

ID Data 
1 five hundred two thousand and seventy nine 

Necesita ayuda para esto.

Gracias

Respuesta

10

Prueba esto:

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 

Su primer problema fue el ORDER BY t1.RowNum en el selecto interior - tiene que ser ORDER BY t2.RowNum lugar. En segundo lugar: esta condición de unión where t2.RowNum= t1.RowNum no es necesaria y causa problemas. Y en tercer lugar: el GROUP BY tampoco es necesario ni útil: simplemente use el SELECT DISTINCT para lograr lo que está buscando.

Además, ¿no estás seguro de por qué estás lanzando Data como VARCHAR (MAX) ???

+0

¡Funcionó como un encanto! – rvphx

Cuestiones relacionadas