2016-05-19 8 views
2

Ich möchte nichts verketten. Bei einer Tabelle mit mehreren Spalten möchte ich stattdessen eine SELECT-Anweisung, die dann jede dieser Spalten zurückgibt, als ob sie in verschiedenen Zeilen existierten (ONE COLUMN). Beispiel ...SQL SELECT Mehrere Spalten in Zusammenführen in 1

 
TABLE       
+--------+---------+---------+        +--------+ 
|Person1 | Person2 | Person3 |        |Person | 
+========+=========+=========+ SELECT *ANSWER HERE*  +========+ 
|Alex | Ben  | Charlie | FROM PEOPLE    |Alex | 
+--------+---------+---------+ ORDER BY *person*?  +--------+ 
|Dale | Eric | Gary |        |Ben  | 
+--------+---------+---------+ RETURNS ------------>  +--------+ 
                  |Charlie | 
^^^ NOTE ABOVE HOW WE ^^^         +--------+ 
    HAVE THREE COLUMNS          |Dale | 
                  +--------+ 
                  |Eric | 
         NOTE HOW WE ONLY     +--------+ 
         RETURN ONE COLUMN --------------> |Gary | 
                  +--------+  

Hinweis: wir mit einer Tabelle beginnen, die drei Spalten hat und kehren nun ein Ergebnis, als ob jede Zeile unabhängig waren.

+0

Verwendung Wenn ein Wert vorhanden ist, mehrere Male (zum Beispiel "Bob" erscheint in Zeile 1 und Zeile 2, und/oder in der Spalte 1 und Spalte 2), Sollte es im letzten Satz mehrfach vorkommen? –

+0

Nein, aber ich nahm an, dass ich eine Gruppe durch oder etwas in der Art machen könnte. –

Antwort

5

Sie können UNPIVOT verwenden, aber UNION auch .. Schalte auf UNION ALL arbeiten Duplikate schließen ..

SELECT Person1 [Person] 
FROM People 
UNION 
SELECT Person2 
FROM People 
UNION 
SELECT Person3 
FROM People 

, wenn Sie möchten UNPIVOT versuchen, die Leistung zu vergleichen, es würde wie folgt aussehen.

SELECT DISTINCT 
     Person 
FROM People 
UNPIVOT ( 
    Person 
    FOR Persons IN ([Person1],[Person2],[Person3]) 
) up 

ein Tabellenwert Constructor

SELECT DISTINCT 
     Person 
FROM People 
     CROSS APPLY (VALUES(Person1),(Person2),(Person3)) t(Person) 
+0

Danke das funktioniert perfekt. –

+0

Aus Neugier, gibt es eine einfache Möglichkeit, die obige Abfrage zu verkürzen? –

+0

@StephenLasky Ich denke, Sie könnten einen Tabellenwert Konstruktor verwenden, um es etwas zu verkürzen – JamieD77

Verwandte Themen