SQL Server 2012 GROUP BY 必须至少有一个不是外部引用的列 - 我只有内部联接



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

Msg 164,级别 15,状态 1,第 21 行 每个 GROUP BY 表达式必须 至少包含一个不是外部引用的列。

我想做什么:按住院时间(patients_records记录(为每个患者提供的总处方,列出第一个,最后一个,患者记录开始和结束日期(每次住院(,以及处方总数

我在网上搜索过类似的问题(大多数或全部似乎都涉及变量或常量(。 我被难住了,真的可以使用一些帮助。我的查询不使用任何外部联接,并且我尝试从分组依据中删除除"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'

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

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,通常还需要聚合函数。

最新更新