2016-06-02 7 views
1

Ich habe eine Tabelle mit Spalten [From], [To]. Ich brauche diese Spalten als eine einzige Liste auszuwählen, und ich tue es auf diese Weise:SQL Wählen Sie 2 Spalten als Liste aus einer Zeile

SELECT [From] FROM [TableX] WHERE (...) 
UNION 
SELECT [To] FROM [TableX] WHERE (...) 

Das Problem ist, dass ich will nicht WHERE (...) Zustand duplizieren, da es ziemlich lang ist. Gibt es eine Möglichkeit, diese Doppelarbeit zu vermeiden?

+0

wenn sie aus derselben Tabelle ist und 'WHERE' die selbe warum brauchen Sie' UNION'? – Alex

+1

Zeigen Sie uns die WHERE-Klausel, und es wird einfacher, das Problem zu verstehen. – jarlh

Antwort

3

einen CTE Verwenden Sie Ihre WHERE Zustand zu verhindern duplizieren:

;WITH [CTE_Criteria] AS (
    SELECT [From], [To] 
    FROM [TableX] 
    WHERE (...) 
) 
SELECT [From] FROM [CTE_Criteria] 
UNION 
SELECT [To] FROM [CTE_Criteria]; 
+0

nicht sicher, dass dies das Problem wirklich lösen wird. – Alex

+0

Ich verstand das Problem, dass er die gleiche WHERE-Bedingung zweimal enthalten musste. In der obigen Abfrage ist es nur einmal vorhanden. –

+0

Können Sie bitte mit diesem Beispiel fiedeln? mit einigen einfachen 'wo'. Ich habe diese Technik nie zuvor benutzt. – Alex

1

Führen Sie die UNION in einer abgeleiteten Tabelle, und haben Sie eine gemeinsame WHERE Klausel.

select * 
from 
(
    SELECT [From] FROM [TableX] 
    UNION 
    SELECT [To] FROM [TableX] 
) 
WHERE (...) 
+0

das wird nie funktionieren; Unterabfrage enthält nur 1 Spalte, aber nicht alles, was Sie in der Tabelle und in der 'WHERE'-Klausel haben :-) – Alex

+0

Hängt von der WHERE-Klausel ab ... Sie können zweistufige abgeleitete Tabellen erstellen, wenn sie benötigt werden . – jarlh

+0

nein es ist nicht * abhängig *. Geben Sie bitte ein beliebiges sinnvolles Beispiel an, wenn diese Abfrage das gleiche Ergebnis liefert wie das ursprüngliche Ergebnis? 'WO 1 = 1'? – Alex