2017-10-16 52 views
1

我有一堆與是/否值的列。這是由它們的長度爲3認定:如何將查詢的結果用作另一個WHERE列?

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

我想指望所有對任何這些列的是行。

所以通常我會做:

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

但我不知道是否有另一個查詢的WHERE子句中應用這些列名的方式。就像這樣:

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" 

我在找的是一個行數,其中任何3長度的列都有'是'。

注意:我在bluemix上使用db2,但任何關於此的一般信息都會有所幫助。

+0

您的「正常」查詢是要走的路。您可以使用「syscat.columns」中的信息執行[**動態查詢**](https://stackoverflow.com/questions/6785302/how-to-execute-an-sql-string-in-db2)你在問什麼? –

回答

3

對於這一點,你必須使用動態SQL,但你可以使用IN謂詞更簡單:

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

使用動態SQL可以生成的列的名字逗號從下列查詢分離的列表:

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

所以這裏的子查詢確實沒有必要 - 我仍然必須列出所有的列? –

+0

@TravisHeeter你不能直接在你的查詢中使用子查詢,你將用它來組成動態sql,這樣你就可以生成列表'c1,c2,c3,c4,...'然後執行動態sql查詢。 – 2017-10-16 14:38:38

+0

不幸的是我對db2並不熟悉,但這是你如何做到的。 – 2017-10-16 14:39:09

相關問題