如何将查询结果用作另一个WHERE列?

时间:2017-10-16 14:30:32

标签: sql db2

我有一堆带有是/否值的列。它们的长度为3:

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"

我正在寻找的是一个行数,其中任何三长列都有一个'是'。

注意:我在bluemix上使用db2,但任何关于此的一般信息都会有所帮助。

1 个答案:

答案 0 :(得分: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