【问题标题】:Trouble with COUNTCOUNT 出现问题
【发布时间】:2019-11-20 15:43:21
【问题描述】:

我有两张桌子,PATIENT 和 VISIT。一个以 PatientID 作为主键,一个以 VisitID 作为主键。我需要选择去过医院两次以上的患者的名字和姓氏。

我尝试过 DISTINCT、嵌套 where 子句、INNER JOIN 等。

SELECT FirstName
     , LastName
     , PatientID
     , COUNT(*) AS total_visits 
  FROM VISIT 
 WHERE total_visits > 2; 

它应该只显示在 VISIT 表中出现两次以上的患者的名字和姓氏,但无论我如何重新排列代码它都不起作用。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    你需要GROUP BYHAVING

    SELECT FirstName, LastName, PatientID, COUNT(*) AS total_visits
    FROM VISIT
    GROUP BY FirstName, LastName, PatientID
    HAVING total_visits > 2;
    

    【讨论】:

    • 您好,感谢您的帮助!但是当我尝试这个时,它会要求 FirstName 上的参数值?
    • @贾斯汀。 . .这表明FirstName 并不是您表中的真正列。
    • 如果我在设计视图中查看 PATIENT 表,我会看到 FirstName,但该列不在 VISIT 表中。
    【解决方案2】:

    根据 Gordon 的回答和您的评论,我认为 VISIT 中的 PatientID 是 PATIENT 表的关键。所以你需要使用“INNER JOIN”。所以你的查询看起来像这样:

    SELECT FirstName, LastName, v.PatientID, COUNT(*) AS total_visits
    FROM VISIT v
    INNER JOIN PATIENT p ON p.PatientID = v.PatientID
    GROUP BY FirstName, LastName, v.PatientID
    HAVING COUNT(*) > 2;
    

    请注意,在 Access 中的 AFAIK 中,您不能在 HAVING 子句中使用别名。您需要按原样重复 COUNT(*)。

    【讨论】:

    • 感谢您的帮助!我完全按照显示的方式尝试了这段代码,它说 PatientID 可以引用 FROM 子句中列出的多个表。知道这可能表明什么吗?
    • 请看我的编辑。只需在两个 PatientID 之前添加 v. 即可指定您从 VISIT 中获取值。您同样可以使用 p。重要的是指定了一个表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多