简体   繁体   English

SQL-仅在所有记录匹配时更新字段

[英]SQL - Update a field only if all records match

I'm fairly new to SQL and have a question about an UPDATE query. 我对SQL还是很陌生,对UPDATE查询有疑问。 I'm using SQL server 2008 R2. 我正在使用SQL Server 2008 R2。 I have written the following SELECT query: 我编写了以下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

The results of which look something like this: 结果如下:

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

So, I've written the following UPDATE query: 因此,我编写了以下UPDATE查询:

;WITH lab AS  (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 AND (abnormal_flag = 'N' OR abnormal_flag is NULL))
UPDATE lab SET results_to = '184'

The above query does updated the person assigned to the lab result. 上面的查询确实更新了分配给实验室结果的人员。 However, I need to only update the results_to field if all the results with the same result_id are 'N' or NULL. 但是,如果所有具有相同result_id的结果均为“ N”或NULL,则仅需要更新results_to字段。

Any help if greatly appreciated. 任何帮助,如果不胜感激。 Thank you! 谢谢!

只需在更新语句后附加一个where子句,然后在该where语句中执行匹配子句。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM