2013-09-22 6 views
0

для следующих данных:Обновление нескольких столбцов с данными, полученными от нескольких строк одной таблицы

PGM  INC  EXC 
First A   AA 
First B   BB 
First C   CC 
First D   DD 

Second E   EE 
Second F   FF 
Second G   GG 
Second H   HH 

Как мы можем последовательно считывать данные столбцов PGM = «Первый» и обновление в Колонном PGM = «Второй»

PGM  INC  EXC 
Second E   AA 
Second F   BB 
Second G   CC 
Second H   DD 

Здесь, как мы видим, PGM = «Second» наметил те же данные PGM = «Первый» для 4-х строк. Как это может быть достигнуто в одном запросе обновления таких нескольких записей.

Просим руководствоваться.

ответ

1

Основная идея - использовать функцию окна row_number для назначения 1, 2, 3 и т. Д. Для двух наборов. Затем вы можете присоединиться к ним, чтобы выяснить, какое значение из набора 1 должно применяться к какому значению в наборе 2.

Вот самый низкий общий метод знаменателя, который работает на Postgres/Oracle/SQL Server. У меня нет доступа к DB2, чтобы попробовать.

если не хватает значения в первом, то конечные значения для второго будут перезаписаны с нулевой

Update 
    test 
Set 
    Exc = (
     Select 
      f.Exc 
     From (
      Select 
       Exc, 
       row_number() over (order by inc) as rn 
      From 
       test 
      Where 
       Pgm = 'First' 
     ) as f 
     inner join (
      Select 
       Inc, 
       row_number() over (order by inc) as rn 
      From 
       test 
      Where 
       Pgm = 'Second' 
     ) as s 
      On f.rn = s.rn 
     Where 
      test.inc = s.inc 
    ) 
Where 
    test.Pgm = 'Second'; 

Example Fiddle

+0

Спасибо за response.May я есть литий 'l объяснение по d выше переменных f, s, rn, t – techie

+0

Мне было бы очень нужно краткое объяснение по вышеуказанному запросу, прежде чем я смог бы запустить его поверх моего db. Подумайте над ключевым словом WITH выше, а также для DB2. – techie

+0

@techie просто начать транзакцию - мой запрос, выберите * из таблицы, транзакцию отката' - мгновенную песочницу. – Laurence

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