2016-09-12 3 views
1

Das muss ein einfacher sein, ich habe diese Frage sehr widerwillig gestellt - aber ich kann es nicht ausarbeiten. Ich habe eine Abfrage, die (auf Umwegen) gibt 2 zählt:Wie kann ich diese Spalten in SQL-Zeilen umwandeln/transponieren?

Col1 | COL2 
123 456 

Aber ich muss zurück:

123 | COL1 
456 | COL2 

Was habe ich versucht,

Ich habe sah bei UNPIVOT aber da dies einfache (unabhängige) Zeilen sind, scheint es unnötig (dh ich muss keinen Bezeichner oder irgendetwas pivotieren/entmutigen).

Der Query

SELECT SUM(CASE WHEN [CONDITION] THEN 1 ELSE 0 END) as Col1, 
     SUM(CASE WHEN [CONDITION] THEN 1 ELSE 0 END) as Col2 
FROM MyTable 
+0

"UNION ALL" wird helfen, denke ich .. –

Antwort

2

Verwenden Sie ein UNION:

SELECT COL1 AS VALUE, 'COL1' AS COL 
FROM yourTable 
UNION ALL 
SELECT COL2 AS VALUE, 'COL2' AS COL 
FROM yourTable 

Wenn Sie aus der gesamten UNION Abfrage auswählen möchten, können Sie es wickeln und wählen Sie aus:

SELECT t.VALUE, 
     t.COL 
FROM 
(
    SELECT COL1 AS VALUE, 'COL1' AS COL 
    FROM yourTable 
    UNION ALL 
    SELECT COL2 AS VALUE, 'COL2' AS COL 
    FROM yourTable 
) t 
+0

Vielen Dank für Ihre Antwort Tim! Ich hatte ursprünglich eine 'UNION', um die 2 separaten Zählungen (dh 2 separate Abfragen) zu erhalten, aber dann versprach ich es weg, also denke ich, dass sub bewusst von' UNION ALL' ablenkte. –

+0

Will tun, muss auf die warten Zeit, mir zu erlauben, zuerst. –

+0

Eine kurze Frage - Sie haben 'FROM' hier, wie kann ich 'von' auf diesem einen Ergebnissatz? Erstellen Sie eine temporäre Tabelle? Scheint ziemlich ausführlich. –

Verwandte Themen