2011-02-24 3 views
0

je besoin de quelque chose comme:Comment aux colonnes de texte groupe dans une colonne

SELECT dt, (???) AS C FROM (SELECT dt,c1,c2,c3,c4 ... 

dt - datetime et par la façon dont j'ai une structure bizarre, par exemple:

24.02.2011 null null null "text" 
25.02.2011 null "te" null "text" 
26.02.2011 null "te" null null 

il doit est devenu

24.02.2011 "text" 
25.02.2011 "te" 
25.02.2011 "text" 
26.02.2011 "te" 

ou peut-être

24.02.2011 "c4" "text" 
25.02.2011 "c2" "te" 
25.02.2011 "c4 "text" 
26.02.2011 "c2" "te" 

si je select dt, с1+с2+с3+с4 as C from select dt,c1,c2,c3,c4

il y aura

25.02.2011 "tetext" 

Cette sortie est INCORRECT pour moi.

il doit être

25.02.2011 "te" 
25.02.2011 "text" 

donc je besoin d'une idée comment puis-je échanger des lignes + colonnes en lignes.

merci.

MS SQL Server 2008.

Mon idée actuelle est de créer la table temporaire ou même peut-être statique avec la structure et j'ai besoin Insérer des données puis sélectionnez à/de celui-ci.

Répondre

1

Le plus simple serait probablement avec UNION ALL:

SELECT dt,'c1' as Col,c1 from table1 where c1 is not null 
UNION ALL 
SELECT dt,'c2' as Col,c2 from table1 where c2 is not null 
UNION ALL 
SELECT dt,'c3' as Col,c3 from table1 where c3 is not null 
UNION ALL 
SELECT dt,'c4' as Col,c4 from table1 where c4 is not null 

C'est la rangée centrale gauche de vos données d'exemple (qui est destinée à produire deux lignes de sortie) qui signifie que les solutions utilisant COALESCE/ISNULL sont probablement condamnées.

0

Je sais comment cela don`t est dans MS SQL server
Mais dans MySQL, vous pouvez voir cette fonction ifnull, if

Questions connexes