【问题标题】:SQL Server 2012 GROUP BY must have at least one column that is not an outer reference- I only have inner joinsSQL Server 2012 GROUP BY 必须至少有一个不是外部引用的列-我只有内部连接
【发布时间】:2017-04-01 15:49:59
【问题描述】:

嗨,我已经尝试解决这个问题两天了。上面的错误信息:

Msg 164, Level 15, State 1, Line 21 每个 GROUP BY 表达式必须 至少包含一列不是外部引用。

我要做什么:每个患者的住院总处方(患者记录记录),列出第一个、最后一个、患者记录的开始和结束日期(每次住院)以及处方总数

我在网上搜索过,stackoverflow 类似的问题(大多数或全部似乎都涉及变量或常量)。我很难过,真的可以使用一些帮助。我的查询不使用任何外部联接,并且我尝试从 group by 中删除除“TotalOfPresc”之外的所有列。我是初学者-请温柔。这是我的代码:

USE [BestHospitalDB];

SELECT PATIENTS.Last, PATIENTS.First, 
    Presc.PrescQuantity * Meds.PrescPrice As 'TotalOfPresc', 
    pr.SubmissionDate, pr.DischargeDate

FROM 
    PATIENTS AS p, 
    [PRESCRIPTIONS] AS Presc, 
    [PRESC_MEDS] AS Meds, 
    PATIENTS_RECORDS AS pr

INNER JOIN
    PATIENTS ON pr.PatientID = PATIENTS.[PatientID]

INNER JOIN
    PRESCRIPTIONS ON PRESCRIPTIONS.PatientsRecordsID = pr.PatientsRecordsID
INNER JOIN
    PRESC_MEDS ON PRESCRIPTIONS.PrescPresc_MedsID = PRESC_MEDS.Presc_MedsID

GROUP BY PATIENTS.First, PATIENTS.Last, pr.SubmissionDate, pr.DischargeDate, 'TotalOfPresc'

【问题讨论】:

  • 编辑您的问题并解释您要做什么。

标签: sql sql-server-2012


【解决方案1】:

您不能按常数值分组。您的查询在几个方面没有意义。我假设你打算这样:

SELECT p.Last, p.First, 
       SUM(px.PrescQuantity * m.PrescPrice) As TotalOfPresc
FROM PATIENTS_RECORDS pr INNER JOIN
     PATIENTS p
     ON pr.PatientID = PATIENTS.[PatientID] INNER JOIN
     PRESCRIPTIONS px
     ON px.PatientsRecordsID = pr.PatientsRecordsID INNER JOIN
     PRESC_MEDS pm
    ON px.PrescPresc_MedsID = pm.Presc_MedsID
GROUP BY p.First, p.Last;

一些忠告:

  • 从不在FROM 子句中使用逗号。你有正确的连接语法,为什么你还想要不必要的笛卡尔积?
  • 不要使用单引号来命名列。你只会让自己感到困惑——这就是你遇到的具体问题。
  • 仅按在输出中定义单行的键进行聚合。如果使用GROUP BY,通常还需要聚合函数。

【讨论】:

  • 感谢您提供多方面的建议。 1.单引号谢谢。 2. from 子句中的逗号。 3. 问题 1. 当您说“仅通过在输出中定义单行的键进行聚合。如果您使用 GROUP BY,您通常还需要聚合函数,”我假设您的意思是 TotalOfPresc。那不是聚合函数吗?问题 2. 哪一列不是外部引用?而且,导致该消息的单引号呢?问题 3. 对不起——我的哪一项是常数? (是的,超级愚蠢)。再次感谢您简洁明了的回答。他们非常有帮助
  • @nascent_coder 。 . .聚合问题的根本原因是GROUP BY 中的'TotalOfPresc'。这只是一个字符串,而不是列引用。
  • 谢谢!我真的很困惑。这个外部参考的东西不清楚。 'constant' 的使用在这里似乎与我在其他编程语言中的不同——如果你能阐明这一点,那也太棒了。
  • @nascent_coder 。 . .在 group by 中使用常量会导致这个奇怪的错误。
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多