SQL Server:简单计数查询

SQL Server:简单计数查询,sql,sql-server,Sql,Sql Server,我试图计算在多个列中出现“on”的次数。第一个查询正好返回我想要的结果,但是当我尝试第二个查询时,它只返回列标题,没有结果。如果有人能告诉我出了什么问题,我就回到sql上来 此查询返回所需的结果: DECLARE @MainHospital varchar(50)='HOSPITAL 1'; SELECT mainhospital, COUNT([chkInpatient]) as 'Inpatient Count' FROM SurveyPicList WHERE

我试图计算在多个列中出现“on”的次数。第一个查询正好返回我想要的结果,但是当我尝试第二个查询时,它只返回列标题,没有结果。如果有人能告诉我出了什么问题,我就回到sql上来

此查询返回所需的结果:

DECLARE @MainHospital varchar(50)='HOSPITAL 1';

SELECT 
    mainhospital, COUNT([chkInpatient]) as 'Inpatient Count'
FROM 
    SurveyPicList
WHERE 
    MainHospital = @MainHospital 
    AND chkInpatient = 'on'
GROUP BY 
    MainHospital
这只返回5个列标题,但不返回结果:

DECLARE @MainHospital varchar(50)='HOSPITAL 1';

SELECT 
    mainhospital, 
    COUNT([chkInpatient]) AS 'Inpatient Count', 
    COUNT([chkPartB]) AS 'PartB Count', 
    COUNT([chkOutpatient]) AS 'Outpatient Count', 
    COUNT([chkER]) AS 'ER Count'
FROM 
    SurveyPicList
WHERE 
    MainHospital = @MainHospital 
    AND chkInpatient = 'on' 
    AND chkPartB = 'on' 
    AND chkOutpatient = 'on' 
    AND chkER = 'on'
GROUP BY 
    MainHospital

似乎您希望单独计算每一列。使用条件聚合,而不是
where
子句:

DECLARE @MainHospital varchar(50)='HOSPITAL 1';

SELECT mainhospital,
       SUM(CASE WHEN [chkInpatient] = 'on' THEN 1 ELSE 0 END) as "Inpatient Count",
       SUM(CASE WHEN [chkPartB] = 'on' THEN 1 ELSE 0 END) as 'PartB Count',
       SUM(CASE WHEN [chkOutpatient] = 'on' THEN 1 ELSE 0 END) as "Outpatient Count",
       SUM(CASE WHEN [chkER] = 'on' THEN 1 ELSE 0 END) as "ER Count"
FROM SurveyPicList
WHERE MainHospital = @MainHospital
GROUP BY MainHospital;
查询不起作用的原因是没有一行在上将所有四列都设置为
,这是您在该
where
子句中所要求的


注意,我还将列别名更改为使用双引号。仅对字符串和日期常量使用单引号。

您的第二个查询是查找chkInpatient、chkPartB、chkOutpatient和chkER对每条记录都“打开”的情况。这就是你没有得到任何返回记录的原因吗?

工作得很好,这对于我的
where
子句来说很有意义,谢谢。