繁体   English   中英

如何将Case语句的Null值返回到Group by

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM