用于查找4列数组中空列位置的SQL查询
问题描述:
我在表中有四列和一行;我想使用SQL查询来返回一个数字(0-4),标识第一列(从左到右)为空或空。 例如,如果列1,2和3包含数据,则查询将返回“4”。 如果第1列和第4列包含数据,则查询将返回“2”。 如果没有列包含数据,则结果应为“1”。 如果他们都包含数据,那么“0” 是否有合乎逻辑的解决方案,所有16个组合都不需要明确测试每种可能性?用于查找4列数组中空列位置的SQL查询
答
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
答
真的没什么简单的(你正在寻找一种双聚结):
您可以使用搜索的情况下,虽然:
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
答
要在检查所有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,如果所有四个字段不为空, 如果全部都有数据。
您使用的是什么RDBMS?你如何得到16种组合?只有5个可能的结果。 – RichardTheKiwi 2011-03-30 18:25:05
你的逻辑对我来说毫无意义......如果1,2和3然后是4;如果1&4然后2,如果没有那么1,如果所有然后0?如何识别第一列为空或空的列。 – 2011-03-30 18:33:33