嗨,我已经尝试解决这个问题两天了。上述错误消息:
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
,通常还需要聚合函数。