当我运行下面的脚本时,我收到一条错误消息"无法对包含聚合或子查询的表达式执行聚合函数"请提供一些建议。感谢
SELECT
CONVERT(DECIMAL(18,5),SUM(CASE WHEN PATIENT_ACCOUNT_NO IN (
SELECT PATIENT_ACCOUNT_NO
FROM STND_ENCOUNTER
GROUP BY PATIENT_ACCOUNT_NO
HAVING ( COUNT(PATIENT_ACCOUNT_NO) > 1)) THEN 0 ELSE 1 END)) dupPatNo
FROM [DBO].[STND_ENCOUNTER]
答案 0 :(得分:3)
我认为错误信息非常清楚。你有一个sum()
函数,其中包含一个子查询(虽然在case
范围内,但这无关紧要。)
您似乎想要选择有多次遭遇的患者,如果患者在列表中,则添加0
,如果患者不在,则添加1
。嗯。 。 。听起来你想要计算只有一次遭遇的病人数。
请尝试使用此逻辑:
select count(*)
from (select se.*, count(*) over (partition by PATIENT_ACCOUNT_NO) as NumEncounters
from dbo.stnd_encounter se
) se
where NumEncounters = 1;
注意,您要分配的变量称为DupPatientNo
。这听起来像有重复的患者数量。在这种情况下,查询是:
select count(distinct PATIENT_ACCOUNT_NO)
from (select se.*, count(*) over (partition by PATIENT_ACCOUNT_NO) as NumEncounters
from dbo.stnd_encounter se
) se
where NumEncounters > 1;
(如果您想要重复患者的遭遇次数,请使用count(*)
。)
答案 1 :(得分:0)
如果您想查找没有任何重复项的PATIENT_ACCOUNT_NO个数,请使用以下
SELECT COUNT(DISTINCT dupPatNo.PATIENT_ACCOUNT_NO)
FROM (
SELECT PATIENT_ACCOUNT_NO
FROM STND_ENCOUNTER
GROUP BY PATIENT_ACCOUNT_NO
HAVING COUNT(PATIENT_ACCOUNT_NO) = 1
) dupPatNo
如果您想查找至少有一个的PATIENT_ACCOUNT_NO个数,请使用以下
SELECT COUNT(DISTINCT dupPatNo.PATIENT_ACCOUNT_NO)
FROM (
SELECT PATIENT_ACCOUNT_NO
FROM STND_ENCOUNTER
GROUP BY PATIENT_ACCOUNT_NO
HAVING COUNT(PATIENT_ACCOUNT_NO) > 1
) dupPatNo
使用DISTINCT会使查询不能一次又一次地计算相同的项目
虽然您的查询查找第一个结果,但它不清楚您想要什么。因此给两个查询