0

我需要编写一个 Firebird 存储过程来检查 4 个字段值并仅返回非空值的计数。

例如在伪代码中:

  X = 0; //is the count variable

  if field_1 is not null then X = 1;
  if field_2 is not null then X = X + 1;
  if field_3 is not null then X = X + 1;
  if field_4 is not null then X = X + 1;

但是我想问一下是否可以在单个 Select 中做到这一点?

我正在使用火鸟 2.5

4

2 回答 2

1

您可以使用该IIF函数执行此操作,如下所示:

select IIF(Field_1 is null, 0, 1)
     + IIF(Field_2 is null, 0, 1)
     + IIF(Field_3 is null, 0, 1)
     + IIF(Field_4 is null, 0, 1)
  from SomeTable;
于 2013-04-11T03:25:07.017 回答
0

如果您想获得每行的总和,那么使用Welliam 建议的IIF函数就可以了。

但是,如果您只想获得所有行的总和,请使用COUNT具有显式字段名的聚合函数

select count(Field_1) + count(Field_2) + count(Field_3) + count(Field_4)
   from SomeTable;

在这种情况下,它会计算指定字段不为 NULL 的行。

于 2013-04-11T07:32:05.553 回答