2011-03-30 53 views
0

我在表中有四列和一行;我想使用SQL查询来返回一个数字(0-4),标识第一列(从左到右)为空或空。 例如,如果列1,2和3包含数据,则查询将返回“4”。 如果第1列和第4列包含数据,则查询将返回“2”。 如果没有列包含数据,则结果应为“1”。 如果他们都包含数据,那么“0” 是否有合乎逻辑的解决方案,所有16个组合都不需要明确测试每种可能性?用于查找4列数组中空列位置的SQL查询

+0

您使用的是什么RDBMS?你如何得到16种组合?只有5个可能的结果。 – RichardTheKiwi 2011-03-30 18:25:05

+0

你的逻辑对我来说毫无意义......如果1,2和3然后是4;如果1&4然后2,如果没有那么1,如果所有然后0?如何识别第一列为空或空的列。 – 2011-03-30 18:33:33

回答

5
select case 
    when a is null then 1 
    when b is null then 2 
    when c is null then 3 
    when d is null then 4 
    else 0 end as FirstNull 
from sometable 
2

真的没什么简单的(你正在寻找一种双聚结):

您可以使用搜索的情况下,虽然:

SELECT 
    CASE 
     WHEN col1 IS NULL THEN 1 
     WHEN col2 IS NULL then 2 
     WHEN col3 IS NULL then 3 
     WHEN col4 IS NULL then 4 
    ELSE 0 
END 
0

要在检查所有16种组合一次,使用此:

SELECT (IF(a IS NULL, 8, 0) 
     + IF(b IS NULL, 4, 0) 
     + IF(c IS NULL, 2, 0) 
     + IF(d IS NULL, 1, 0) 
     ) AS fullcheck   --takes values from 0 to 15 
FROM yourTable 
; 

fullcheck将是15,如果所有四个字段不为空, 如果全部都有数据。