我不确定这是否可能,或者是否可行,如何做到 -
我在数据库中有以下数据 -
id | improve | timeframe | criteria | impact
-------+------------+-------------+-----------+---------
1 | | Test | Test | Test
2 | Test | | Test |
3 | | Test | |
-------+------------+-------------+-----------+---------
忽略id列,如何使用SQL查询确定其余12个中非空的字段数?
我已经开始了 -
SELECT improve, timeframe, impact, criteria
FROM data
WHERE improve IS NOT NULL
AND timeframe IS NOT NULL
AND impact IS NOT NULL
AND criteria IS NOT NULL;
这只返回行数,即。 3。
有什么想法吗?
感谢。
答案 0 :(得分:6)
SELECT count(improve) + count(timeframe) + count(impact) + count(criteria) FROM data
答案 1 :(得分:3)
这样的事情可能会让你朝着正确的方向前进
SELECT
SUM(CASE WHEN improve IS NULL THEN 0 ELSE 1 END +
CASE WHEN timeframe IS NULL THEN 0 ELSE 1 END +
CASE WHEN criteria IS NULL THEN 0 ELSE 1 END +
CASE WHEN impact IS NULL THEN 0 ELSE 1 END)
from
data
答案 2 :(得分:0)
SELECT id,COUNT(改进)+ COUNT(时间范围)+ COUNT(影响)+ COUNT(条件)FROM数据GROUP BY id;
答案 3 :(得分:-1)
如果您使用的是SQL Server,请使用DATALENGTH()。
SELECT improve, timeframe, impact, criteria
FROM data
WHERE DATALENGTH(improve) > 0
AND DATALENGTH(timeframe) > 0
AND DATALENGTH(impact) > 0
AND DATALENGTH(criteria) >0;
DATALENGTH以字节为单位返回字符串的长度,包括尾随空格。这听起来好像你对空白字段没问题,所以DATALENGTH做了这个工作。否则,你也可以使用LEN()来修剪任何尾随空格。
如果您使用的是MySQL ,则可以使用CHARACTER_LENGTH,它会删除尾随空格,然后为您提供要检查的字段的字符数。
答案 4 :(得分:-2)
SELECT Sum(case when improve is null then 0 else 1 end +
case when timeframe is null then 0 else 1 end +
case when impact is null then 0 else 1 end +
case when criteria is null then 0 else 1 end)
FROM data
group by improve, timeframe, impact, criteria