1

这是我的第二个(我称之为 noobish)sql 问题,虽然我知道我应该提高我的 sql 知识,但在这种情况下,我已经被一位开发人员抛弃了。

无论如何,问题。我正在使用 mysql 5

我正在处理存储过程 api。其中一个 sp 是返回一个表的所有行以及来自该表的一些其他计算结果。

Table: reports
ID|col_1|col_2|col_3|col_4|col_5
--------------------------------
 x| xxx | xxx | xxx | xxx | xxx 

我正在尝试计算完成指数(之前的开发人员没有为此添加一列,时间不允许我重构)。

因此,如果...

col_1 is not null
col_2 is not null
col_3 is null
...

舞台将是2

而如果...

col_1 is not null
col_2 is null <<-- notice the empty field
col_3 is not null

舞台将是1就像有一块空地一样。

所以阶段递增,直到有一个空字段。

现在我知道我可以检索所有行并使用 php 处理这些信息,但我不想偏离系统的设计。

如果有人能指出我正确的方向,我将不胜感激。

4

2 回答 2

5
Select Case
        When col_1 Is Null Then 0
        When col_2 Is Null Then 1
        When col_3 Is Null Then 2
        When col_4 Is Null Then 3
        When col_5 Is Null Then 4
        Else 5
        End
于 2013-09-18T15:32:13.360 回答
1

您可以通过对匹配项求和来做到这一点:

select ((col_1 is not null) +
        (col_1 is not null and col2 is not null) +
        (col_1 is not null and col2 is not null and col3 is not null) +
        (col_1 is not null and col2 is not null and col3 is not null and col4 is not null) +
        (col_1 is not null and col2 is not null and col3 is not null and col4 is not null and col5 is not null)
       ) as IndexOfCompletion
. . .
于 2013-09-18T15:25:18.450 回答