我有一个表格XXX,其中有多个列,这些列是单个字段的增量。
id | FIELD_1 | FIELD_2 | FIELD_3 | FIELD_4 | ... | FIELD_45
-----------------------------------------------------------
1 | "value" | "value" | "value" | " " | ... | " "
我需要找出值不为空的每一行的字段数。 有没有办法通过SQL做到这一点?
答案 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
进行比较。