SQL有条件地更新每一行

问题描述:

我遇到了复杂的情况。我搜索了所有的博客,但找不到任何接近我的期望的答案。我运行下面的查询:SQL有条件地更新每一行

**Table1              Table2**  
**ID Status RptGChng RptAChng RptRChng  | ID Status** 
8614 Green 0    0  0    | 8614 Red 
8548 Unknown 0    0  0    | 8548 Amber 
2591 Amber 0    0  0    | 2591 Amber 
7813 Green 0    0  0    | 7813 Green 
8413 Red  0    0  0    | 8413 Red 
8183 Green 0    0  0    | 8183 Green 
7431 Red  0    0  0    | 7431 Red 
7399 Green 0    0  0    | 7399 Red 
7776 Unknown 0    0  0    | 7776 Unknown 
8609 Green 0    0  0    | 8609 Green 
8068 Green 0    0  0    | 8068 Green 

的RptGChng应该给我1的值,如果出现了从表1至表2的id绿色值的变化。我需要以这种方式填充RptAChng - > Amber和RptRChng - > Red。 ,我写在这抵达的代码如下:

set [RptGChng] = 
IIF(([Status]='Green'),1,0)- 
IIF(([Status]=(
SELECT b.[Status] FROM [Table1] a INNER JOIN [Table2] b ON 
a.[id]= b.[id] and b.[Status]='Green')),1,0) 

UPDATE t1 
SET t1.RptGChng = CASE WHEN t1.[Status] = 'Green' AND t1.[Status] <> t2.[Status] 
         THEN 1 ELSE t1.RptGChng END 
    ,t1.RptAChng = CASE WHEN t1.[Status] = 'Amber' AND t1.[Status] <> t2.[Status] 
         THEN 1 ELSE t1.RptAChng END 
    ,t1.RptRChng = CASE WHEN t1.[Status] = 'RED' AND t1.[Status] <> t2.[Status] 
         THEN 1 ELSE t1.RptRChng END 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.[id]= t2.[id] 

既然你已经使用IIF表达我想你正在使用SQL Server 2012或更高版本,你可以写与IIF上面的说法太:

UPDATE t1 
SET t1.RptGChng = IIF(t1.[Status] = 'Green' AND t1.[Status] <> t2.[Status], 1 , t1.RptGChng) 
    ,t1.RptAChng = IIF(t1.[Status] = 'Amber' AND t1.[Status] <> t2.[Status], 1 , t1.RptAChng) 
    ,t1.RptRChng = IIF(t1.[Status] = 'RED' AND t1.[Status] <> t2.[Status], 1 , t1.RptRChng) 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.[id]= t2.[id] 
+2

我对你理解这个问题的能力印象深刻。 – 2014-12-27 18:42:24

+0

我使用了@ M.Ali编写的第二个代码,但我得到的多部分标识符列无法绑定。我不得不做一个小小的调整,并修复它。 UPDATE t1 SET RptGChng = IIF(t1。[Status] ='Green'AND t1。[Status] t2。[Status],1,t1.RptGChng) ,RptAChng = IIF(t1。[Status] =' [Status] t2。[Status],1,t1.RptAChng) ,RptRChng = IIF(t1。[Status] ='RED'AND t1。[Status] t2。[Status] ,1,t1.RptRCngng) FROM Table1 t1 INNER JOIN Table2 t2 ON t1。[id] = t2。[id] – SKP 2014-12-28 06:06:40