[英]How do I count how many of these columns have a value in SQL?
Assume the following table: 假设下表:
ID | Item1 | Item2 | Item3 | Item4 | Item5
------------------------------------------
A | NULL | NULL | YES | YES | NULL
B | NULL | NULL | NULL | YES | NULL
C | NULL | NULL | NULL | NULL | NULL
I want to return the following data set: 我想返回以下数据集:
ID | Count
------------
A | 2
B | 1
C | 0
Basically, I want a count how many of the columns of Item1-5 are NOT NULL
for that ID 基本上,我想计算该ID的Item1-5的多少列不是
NULL
How can I do this in MS-SQL? 如何在MS-SQL中执行此操作?
Not tested, but something like this should work. 未经测试,但类似的东西应该起作用。
SELECT
Id,
SUM(
CASE WHEN Item1 is NULL THEN 0 ELSE 1 END
+
CASE WHEN Item2 is NULL THEN 0 ELSE 1 END
+
CASE WHEN Item3 is NULL THEN 0 ELSE 1 END
+
CASE WHEN Item4 is NULL THEN 0 ELSE 1 END
+
CASE WHEN Item5 is NULL THEN 0 ELSE 1 END
) 'Count'
FROM
tableName
GROUP BY
Id
Try: 尝试:
DECLARE @YourTable table (ID char(1), Item1 varchar(3), Item2 varchar(3), Item3 varchar(3), Item4 varchar(3), Item5 varchar(3))
INSERT @YourTable VALUES ('A' , NULL , NULL , 'YES' , 'YES' , NULL)
INSERT @YourTable VALUES ('B' , NULL , NULL , NULL , 'YES' , NULL)
INSERT @YourTable VALUES ('C' , NULL , NULL , NULL , NULL , NULL)
SELECT
ID, CASE WHEN ITEM1 IS NULL THEN 0 ELSE 1 END
+CASE WHEN ITEM2 IS NULL THEN 0 ELSE 1 END
+CASE WHEN ITEM3 IS NULL THEN 0 ELSE 1 END
+CASE WHEN ITEM4 IS NULL THEN 0 ELSE 1 END
+CASE WHEN ITEM5 IS NULL THEN 0 ELSE 1 END AS [Count]
FROM @YourTable
OUTPUT: OUTPUT:
ID Count
---- -----------
A 2
B 1
C 0
(3 row(s) affected)
This should do it: 应该这样做:
SELECT ID, (case when item1 is null then 0 else 1 end)+
(case when item2 is null then 0 else 1 end)+
(case when item3 is null then 0 else 1 end)+
(case when item4 is null then 0 else 1 end)+
(case when item5 is null then 0 else 1 end) AS Count
FROM Table
ORDER BY ID
I hope this is a hypothetical question and not an actual production table. 我希望这是一个假设性问题,而不是实际的产量表。
Just another option: If you're in sql 2k5 or later you can also use an unpivot to count all non-null values. 另一个选择:如果您使用的是sql 2k5或更高版本,则还可以使用unpivot来计数所有非null值。 You won't get any rows for zero-counts directly from this query though.
但是,您不会直接从此查询获得任何零计数行。 It does however save the tedium of case statements.
但是,它确实节省了case语句的乏味。
select
ID, count(ItemCount) as ItemCount
from
(
select ID, Item1, Item2, Item3, Item4, Item5
from TableA a
) t
unpivot
(
ItemCount for Item in
(
Item1, Item2, Item3, Item4, Item5
)
) as unpvt
group by
ID
Another technique. 另一种技术。
SELECT
ID,
(SELECT COUNT(C) FROM(
SELECT Item1 C
UNION ALL
SELECT Item2
UNION ALL
SELECT Item3
UNION ALL
SELECT Item4
UNION ALL
SELECT Item5)
D)
AS [Count]
FROM @YourTable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.