2017-10-16 1 views
1

Ich habe eine Reihe von Spalten mit Ja/Nein-Werten. Diese sind gekennzeichnet durch ihre Länge von 3:Wie verwendet man die Ergebnisse einer Abfrage als die WHERE-Spalten in einem anderen?

SELECT colname 
    FROM syscat.columns 
    WHERE tabname='CL' 
    AND length = 3 

Ich möchte alle Zeilen zählen, die ein Ja für jede dieser Spalten haben.

Also normalerweise würde ich tun:

SELECT COUNT(*) 
    FROM CL 
    WHERE c1=yes or c2=yes or c3=yes #... 

Aber ich frage mich, ob es einen Weg gibt, diese Spaltennamen in der WHERE-Klausel einer anderen Abfrage anzuwenden. Etwas wie folgt aus:

SELECT COUNT(sub.*) 
    FROM (
    SELECT colname 
     FROM syscat.columns 
     WHERE tabname='CL' 
     AND length = 3 
) sub 
    WHERE [sub] = yes #How can I say "The VALUE of each column name from the subquery" 

Was ich suche ist eine Anzahl von Zeilen, in denen jede 3-Länge Spalte ein ‚Ja‘ hat.

Hinweis: Ich verwende db2 auf bluemix, aber alle allgemeinen Informationen dazu wären hilfreich.

+0

Ihre "normale" Abfrage ist der Weg zu gehen. Sie können eine [** dynamische Abfrage **] (https://stackoverflow.com/questions/6785302/how-to-execute-an-sql-string-in-db2) mit den Informationen von "syscat.columns" durchführen. ist das was du fragst? –

Antwort

3

Dazu haben Sie dynamische SQL verwenden, aber Sie können es einfacher, mit dem IN Prädikat machen:

SELECT COUNT(*) 
FROM CL 
WHERE yes in(c1, c2, c3, c4, ....) 

mit Dynamic SQL Sie die Liste der Spalten Namen erzeugen können Komma aus der folgenden Abfrage getrennt:

SELECT colname 
FROM syscat.columns 
WHERE tabname='CL' 
    AND length = 3 
+0

Also die Sub-Abfrage ist hier wirklich nicht notwendig - ich müsste immer noch alle Spalten auflisten? –

+0

@TravisHeeter Sie können die Unterabfrage nicht direkt in Ihrer Abfrage verwenden, Sie werden zum Erstellen der dynamischen SQL verwenden, so dass Sie die Liste 'c1, c2, c3, c4, ...' erzeugen und dann die dynamische SQL-Abfrage ausführen können. –

+0

Leider bin ich nicht vertraut mit db2, aber das ist, wie Sie es tun können. –

Verwandte Themen