SQL Count пустые поля - PullRequest
       31

SQL Count пустые поля

2 голосов
/ 23 ноября 2011

Я не уверен, возможно ли это или нет, как это сделать -

У меня есть следующие данные в базе данных -

id     |    improve |   timeframe |  criteria |  impact
-------+------------+-------------+-----------+--------- 
1      |            |    Test     |   Test    |    Test
2      |    Test    |             |   Test    |   
3      |            |    Test     |           |    
-------+------------+-------------+-----------+--------- 

Игнорирование столбца idКак определить количество полей из оставшихся 12, которые не являются нулевыми, с помощью SQL-запроса?

Я начал с -

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.

Есть идеи?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 23 ноября 2011
SELECT count(improve) + count(timeframe) + count(impact) + count(criteria) FROM data 
3 голосов
/ 23 ноября 2011

Нечто подобное может заставить вас двигаться в правильном направлении

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 
0 голосов
/ 12 мая 2016

SELECT id, COUNT (улучшение) + COUNT (таймфрейм) + COUNT (воздействие) + COUNT (критерии) ИЗ данных GROUP BY id;

0 голосов
/ 23 ноября 2011

Если вы используете SQL Server, use 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, который удаляет завершающий пробел и затем даетколичество символов поля, которое вы хотите проверить.

0 голосов
/ 23 ноября 2011
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
...