2014-12-27 4 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, если произошло изменение в зеленой стоимости ид из Table1 в Table2. Мне нужно заполнить таким образом для 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 Expression Я думаю, что вы используете 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

Я впечатлен вашей способностью понять вопрос. –

+0

Я использовал второй код, который написал @ M.Ali, но я не могу связать столбец идентификатора нескольких частей. Мне пришлось сделать небольшую настройку, и это было исправлено. UPDATE t1 SET RptGChng = IIF (t1. [Status] = 'Green' AND t1. [Status] <> t2. [Status], 1, t1.RptGChng) , RptAChng = IIF (t1. [Status] = ' Янтарь 'И t1. [Status] <> t2. [Status], 1, t1.RptAChng) , RptRChng = IIF (t1. [Status] =' RED 'AND t1. [Status] <> t2. [Status] , 1, t1.RptRChng) Из таблицы 1 t1 ВХОДЯЩИЙ ПРИСОЕДИНЯЙТЕСЬ Таблица2 t2 ВКЛ t1. [Id] = t2. [Id] – SKP

Смежные вопросы