2010-05-28 10 views
2

Désolé pour une question peu claire précédemment; je espère pouvoir recommencer ...PIVOT ne fonctionne pas comme prévu

Je ces données:

entityid name     stringvalue 
----------- -------------------- -------------------- 
1   ShortDescription  Coal 
1   LongDescription  BlackCoal 
1   ShortDescription  Gold 
1   LongDescription  WhiteGold 
1   ShortDescription  Steel 
1   LongDescription  StainlessSteel 

Et cette requête:

select * 
from 
(
    select entityid, name, stringvalue as stringvalue 
    from mytable 
) as d 
pivot 
(
    min([stringvalue]) 
    for [name] in ([ShortDescription],[LongDescription]) 
) 
as p 

La production de cette sortie:

entityid ShortDescription LongDescription 
-------- ---------------- --------------- 
1  Coal    BlackCoal 

Quelqu'un pourrait-il me dire pourquoi les autres rangées ne sont pas produites, s'il vous plaît? Je me attendais à voir:

entityid ShortDescription LongDescription 
-------- ---------------- --------------- 
1  Coal    BlackCoal 
1  Gold    WhiteGold 
1  Steel   StainlessSteel 

Répondre

2

La réponse est avéré être ceci:

select * 
from 
(
    select entityid, [name], stringvalue as stringvalue 
    from mytable 
) as d 
pivot 
(
    min(stringvalue) 
    for [name] in ([ShortDescription],[LongDescription]) 
) 
as p 

:)

Le défaut est que la table d'entrée aurait dû 1, 1, 2, 2, 3, 3 pour les lignes entityid, respectivement.

M