2017-10-16 5 views
1

私はyes/noの値を持つ列がたくさんあります。これらは、その長さは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を使用していますが、これに関する一般的な情報は役に立ちます。

あなたは動的SQLを使用する必要がありますが、あなたは IN述語を使用して、それを簡単にすることができます。このため
+0

あなたの「通常の」クエリは、移動する方法です。 "syscat.columns"の情報を使用して[**動的クエリ**](https://stackoverflow.com/questions/6785302/how-to-execute-an-sql-string-in-db2)あなたが求めているのはそれですか? –

答えて

3

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サブクエリを直接クエリで使用することはできません。リスト 'c1、c2、c3、c4、...'を生成できるように動的SQLを作成し、動的SQLクエリを実行します。 –

+0

残念ながら私はdb2に精通していませんが、これはあなたがそれを行う方法です。 –

関連する問題