我有一堆带有是/否值的列。它们的长度为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,但任何关于此的一般信息都会有所帮助。
答案 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