我对 SQL 相当陌生,并且对 UPDATE 查询有疑问。我正在使用 SQL Server 2008 R2。我编写了以下 SELECT 查询:
SELECT res.labresultcat_id, res.patient_id, lab.test_performed,
lab.result_status, lab.result_value, lab.abnormal_flag, res.recorded_on,
res.cat_test_name, res.results_to, usr.last_name, res.result_viewed
FROM dbo.med_labresultcat res
INNER JOIN dbo.med_labresult lab
ON res.labresultcat_id = lab.labresultcat_id
LEFT JOIN dbo.res_user usr
ON res.results_to = usr.resource_id
WHERE lab.result_status = 'F' AND usr.last_name = 'Smith'
AND res.result_viewed is NULL
结果如下所示:
patient_id result_id test_performed abnormal_flag recorded_on results_to
0001 0045 ABC N 4/1/2013 14
0001 0045 CBS A 4/1/2013 14
0002 0061 NBC N 4/3/2013 13
0002 0061 MST N 4/3/2013 13
0003 0090 ABC H 4/20/2013 10
0003 0090 MST N 4/20/2013 10
我要做的是仅当具有相同 result_id 的所有记录 = N 或 NULL 时才更新 results_to 字段
因此,我编写了以下 UPDATE 查询:
;WITH lab AS
(
select RES.labresultcat_id, res.cat_test_name, res.results_to,
res.result_status,
lab.test_performed, lab.result_value, lab.abnormal_flag,
res.result_viewed, usr.last_name
from DBO.med_labresultcat RES
INNER JOIN dbo.med_labresult lab
ON res.labresultcat_id = lab.labresultcat_id
LEFT JOIN DBO.res_user USR
ON res.results_to = usr.resource_id
WHERE res.result_viewed is null AND lab.result_status = 'F'
and RES.test_date <= '03/15/2013' AND usr.last_name = 'Smith'
)
UPDATE lab SET results_to = CASE WHEN 0 = (SELECT COUNT(abnormal_flag)
WHERE abnormal_flag = 'A' OR abnormal_flag = 'H' OR abnormal_flag = 'L')
THEN '146' ELSE results_to END
但是,上面的查询抛出了 SQL 错误“聚合可能不会出现在更新语句的集合列表中”不幸的是,对这个错误的研究超出了我对 SQL 的理解。
如果有人能提供一些明确的方向来说明如何继续前进,我将不胜感激,因为我现在非常困惑。