当我试图找出哪个患者帐户有重复记录时收到错误消息。

时间:2014-07-23 18:08:24

标签: sql sql-server

当我运行下面的脚本时,我收到一条错误消息"无法对包含聚合或子查询的表达式执行聚合函数"请提供一些建议。感谢

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]

2 个答案:

答案 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会使查询不能一次又一次地计算相同的项目

虽然您的查询查找第一个结果,但它不清楚您想要什么。因此给两个查询