2014-12-27 86 views
0

我遇到了複雜的情況。我搜索了所有的博客,但找不到任何接近我的期望的答案。我運行下面的查詢: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) 

回答

2
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