我對SQL相當陌生,並且對UPDATE查詢有疑問。我正在使用SQL Server 2008 R2。我寫了下面的SELECT查詢:SQL - 僅當具有相同ID的所有記錄符合要求時才修改字段
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
我想要做的就是更新results_to場只有當所有與記錄同樣result_id是= N或NULL
所以,我寫了下面的更新查詢:
;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的理解。
我真的很感激,如果有人可以提供一些明確的方向,如何繼續前進,因爲我現在很堅持。
演示只是一個未成年人「單挑」的評論......當你'LEFT JOIN'到一個表,然後添加邏輯來限制基於數據集在'WHERE'標準的那個表中的一個字段可以有效地將'LEFT JOIN'變成'INNER JOIN'。 – 2013-05-07 14:49:35
這很有道理。謝謝Alex。 – MLorenzen 2013-05-08 14:46:43