[英]How do i return Null value of Case statement into Group by
列Elites.HasInsurance
是:
HasInsurance
true
true
true
我将通过此命令对此列进行分组:
Select CASE WHEN e.HasInsurance=1 THEN N'YES' ELSE N'NO' END AS HasInsurance, COUNT(*) as CountHasInsurance
from
Elites e
group by e.HasInsurance
获得的输出等于:
YES ==> 3
但我希望得到以下输出:
YES ==> 3
NO ==> 0
我不想在数据库中创建新表。
你需要LEFT JOIN
。 我建议:
select v.hasInsuranceStr, count(e.hasInsurance) as CountHasInsurance
from (values (N'Yes', 'true'), (N'No', 'false')
) v(hasInsuranceStr, hasInsurance) left join
Elites e
on e.hasInsurance = v.hasInsurance
group by v.hasInsuranceStr;
一些说明:
hasInsurance
。 那已经是一个整数值。 我推荐一个不同的名字。 VALUES()
具有数字和查找值。 true
表示字符串,因为SQL Server不支持布尔类型。 这应该可以让你得到你想要的东西:
SELECT TF.[value] AS HasInsurance,
COUNT(E.HasInsurance) AS [Count]
FROM (VALUES('True'),('False')) TF([Value])
LEFT JOIN Elites E ON TF.[value] = E.HasInsurance
GROUP BY TF.[value];
查询不会返回不存在的数据的行; 因此, VALUES
子句为'True'
和'False'
创建行,这意味着即使它们不在Elites
表中,也可以返回值。
你可以使用:
Select
CASE WHEN e.HasInsurance=1 THEN N'YES' ELSE N'NO' END AS HasInsurance,
COUNT(e.HasInsurance) as CountHasInsurance
FROM (SELECT 0 UNION SELECT 1) AS s(x)
LEFT JOIN Elites e
ON s.x = e.HasInsurance
group by s.x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.