2014-12-03 4 views
0

У меня есть набор записей, который мне нужно обновить с каждой строкой.Обновить таблицу sql с foreach

Contract Number Reference Number 

1488126698627 112082 
0000926775991 629013 
0000926775991 
1808199032200 928022 
0000526840337 630422 
0000526840337 
0000527102517 
0000527102517 117312 
0000527135329 941407 
0082100091988 112310 
0082100091988 
1808199524881 21435 
0000927142120 80960 
2223200018220 334370 
2972200000048 335784 
0000927055614 
0000927055614 328196 

Каких заявлений я могу работать где логика приравнивает к:

Для каждой строки моего набора записей, если ссылочный номер является недействительным и имеет ряд соответствия контракта, установить ссылочный номер равный ссылочному номеру соглашения о соглашении.

Таким образом, номер договора 0000526840337 имеет 4 строки, но только 1 строка имеет ссылочный номер, мне нужно скопировать ссылочный номер 630422 в другие 3 соответствующие строки.

ответ

1

Вы можете использовать join:

update recordset t join 
     (select ContractNumber, max(ReferenceNumber) as ReferenceNumber 
     from recordset t 
     group by ContractNumber 
     ) tt 
     on t.ContractNumber = tt.ContractNumber 
    set t.ReferenceNumber = tt.ReferenceNumber 
    where t.ReferenceNumber is null; 
+0

Это очень близко, но записи является TempTable, и я не могу использовать псевдоним для моей временной таблицы в UPDATE – DidIReallyWriteThat

+0

@CalvinSmith. , , Я не знаю ограничения на использование псевдонимов для таблицы temp в 'update'. Можете ли вы обновить свой вопрос с помощью своего запрошенного запроса? –

+0

извините Гордон. Мне пришлось поиграть с ним, прежде чем я заработал. Спасибо. – DidIReallyWriteThat

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