在Oracle表的单行中查找已填充的列数

时间:2014-05-20 03:04:34

标签: sql oracle10g

我有一个表格XXX,其中有多个列,这些列是单个字段的增量。

id | FIELD_1 | FIELD_2 | FIELD_3 | FIELD_4 | ... | FIELD_45
-----------------------------------------------------------
1  | "value" | "value" | "value" | " "     | ... |  " " 

我需要找出值不为空的每一行的字段数。 有没有办法通过SQL做到这一点?

1 个答案:

答案 0 :(得分:2)

有,但这是一个很长的表达。您的数据结构看起来很糟糕。你应该有一个表,每个id和每个字段有一行。这称为结点或关联表。

对于您的问题,您可以这样做:

select ((case when field_1 is not null then 1 else 0 end) +
        (case when field_2 is not null then 1 else 0 end) +
        (case when field_3 is not null then 1 else 0 end) +
        . . .
        (case when field_45 is not null then 1 else 0 end) +
       ) as NumNonBlank
from XXX;

在Oracle中,空字符串被视为NULL值,因此您可以使用is not null进行比较。