SQL Server:简单计数查询
我试图计算在多个列中出现“on”的次数。第一个查询正好返回我想要的结果,但是当我尝试第二个查询时,它只返回列标题,没有结果。如果有人能告诉我出了什么问题,我就回到sql上来 此查询返回所需的结果: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
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
子句来说很有意义,谢谢。