2016-09-08 5 views
-1

meine Tabellendaten zu Zeile ist wie folgtKann jemand mir sagen, wie kann ich tun, um diese SQL-Spalte

id Q1 Q2 Q3 
1 4 3 2 

, was ich will eine Abfrage, welche Daten in diesem Format

id Answers 
1 4 
1 3 
1 2 
anzeigen kann

und es gibt eine weitere Tabelle, die dieselbe ID hat, ich möchte auch Spalten aus dieser Tabelle anzeigen, so dass es ein Join ist, um Daten wie oben anzuzeigen.

+0

Welche RDMS verwenden Sie? –

Antwort

2

A union all tut dies:

select id, q1 as answer from t union all 
select id, q2 as answer from t union all 
select id, q3 as answer from t 
order by id; 
+0

Ich habe keine Zeile in meiner Tabelle, sie sind mehr. Ich kann diese Abfrage für 500 Zeilen nicht schreiben, es wird wie 500 * 3 Abfragen sein. –

+0

@MehboobSamnani müssen Sie nicht. Geben Sie es einfach wie oben beschrieben ein – kbball

+0

@Gordon - Ich habe eine Bearbeitung vorgenommen, um eine "order by id" hinzuzufügen. Dachte, das würde Sinn machen, die Ausgabe von ID zu sehen, anstatt alle q1 Antworten, dann alle q2 Antworten usw. zu zeigen. – kbball

0

IF SQL Server, können Sie ein wenig mehr Dynamik gehen.

Declare @YourTable table (id int,Q1 int, Q2 int, Q3 int) 
Insert into @YourTable values 
(1,4,3,2), 
(2,6,4,7) 


Declare @XML xml 
Set @XML = (Select * from @YourTable for XML RAW) 

Select ID = r.value('@id','int') 
     ,Item = attr.value('local-name(.)','varchar(100)') 
     ,Value = attr.value('.','varchar(max)') 
From @XML.nodes('/row') as A(r) 
Cross Apply A.r.nodes('./@*[local-name(.)!="id"]') as B(attr) 

Returns

ID Item Value 
1 Q1  4 
1 Q2  3 
1 Q3  2 
2 Q1  6 
2 Q2  4 
2 Q3  7 
Verwandte Themen