Запрос на обновление всех значений NULL до NULL для всех столбцов в одном запросе или в динамическом c запросе. - PullRequest
0 голосов
/ 20 января 2020

Я ищу запрос SQL для обновления всех столбцов в таблице A, который имеет значение NULL до NOT NULL значений из таблицы C, используя ссылку в качестве таблицы B. Все столбцы в таблице A должны обновляться с использованием одного запроса или динамического запроса c. Значения должны обновляться на основе имени столбца, а значения не должны жестко кодироваться.

Таблица A

  ID     Name   zip  city  Mdate
  10001  Sarah  NULL NULL  02-20-2018
  98765  AJ     NULL Ohio  01-15-2018
  12345  NULL   7511 Texas 03-08-2018

Таблица B

  ID      RollNo     Cdate
  12345   1          01-18-2018
  12345   2          01-22-2018
  12345   3          03-20-2018 
  98765   9          01-18-2018
  98765   8          01-22-2018
  98765   7          03-20-2018
  10001   10         03-08-2018 
  10001   11         01-15-2018
  10001   12         02-20-2018

TABLE C

  Rollno Name  Zip  City  Mdate         Cdate        Modifyby
  1      NULL  7511 Texas 01-18-2018   02-02-2017     @John 
  2      John  5001 NULL  01-22-2018   11-01-2017     @Krish
  3      NULL  7000 Ohio  03-20-2018   11-15-2017     @Maria 
  10     Sarah NULL NULL  03-08-2018   10-05-2017     @tom
  11     Tom   NULL NULL  01-15-2018   04-05-2017     @Sony
  12     NULL  5500 Pune  02-20-2018   03-25-2017     @Sandy  
  9      AJ    NULL Ohio  01-18-2018   10-07-2017     @Mandy
  8      NULL  NULL NULL  01-12-2018   11-02-2017     @Deck
  7      NUll  8000 NULL  01-12-2018   12-05-2017     @Ant

Вывод:

  ID     Name   zip  city  Mdate       Cdate          Modifyby   
  10001  Sarah  5500 Pune  02-20-2018  03-25-2017     @Sandy
  98765  AJ     8000 Ohio  01-18-2018  10-07-2017     @Mandy
  12345  John   7511 Texas 03-08-2018  10-05-2017     @tom

В выводе все значения столбца NULL в таблице A обновляются значениями NOT NULL из таблицы C. Пожалуйста, предоставьте один запрос для обновления всех столбцов NULL в одном запросе.

Я пытаюсь выполнить запрос ниже, но не могу обновить таблицу с помощью max Function. Есть ли альтернатива для этого.

  Select * into #temp FROM

  (
  SELECT A.ID,
  Row_number() over(partition by A.ID order by A.mdate desc) as 
  RNK,C.NAME,C.ZIP,C.CITY,C.MDate,C.Cdate,C.Modifyby
  FROM tableA A
  INNER JOIN tableB B ON A.ID = B.ID
  INNER JOIN tableC C ON B.RollNo = C.RollNo
   )X where RNK = 1


  UPDATE  A SET Name = 
  CASE 
  WHEN MAX(A.Name) IS NULL THEN MAX(C.Name) 
   ELSE Max(A.Name) END
  , Zip = 
   CASE
    WHEN MAX(A.Zip) IS NULL THEN Max(C.Zip)
   ELSE MAX(A.Zip)
  END ,  
  City =CASE 
 WHEN MAX(A.City) IS NULL THEN Max(C.City) 
 ELSE MAX(A.City) 
 END
  FROM #temp A
 INNER JOIN TableB B ON A.ID = B.ID
 INNER JOIN tablec C ON B.RollNo = C.RollNo

Получение ошибки:

Агрегат может не отображаться в списке установок оператора UPDATE.

Мне нужны все значения в выходной таблице вместе со значениями NULL, обновленными с ненулевыми значениями.

1 Ответ

0 голосов
/ 20 января 2020

Попробуйте это ниже скрипт-

ДЕМО ЗДЕСЬ

SELECT A.ID,
CASE 
    WHEN MAX(A.Name) IS NULL THEN MAX(C.Name) 
    ELSE Max(A.Name) 
END Name,
CASE
    WHEN MAX(A.Zip) IS NULL THEN Max(C.Zip)
    ELSE MAX(A.Zip)
END Zip,
CASE 
    WHEN MAX(A.City) IS NULL THEN Max(C.City) 
    ELSE MAX(A.City) 
END City,
A.MDate
FROM table_a A
INNER JOIN Table_B B ON A.ID = B.ID
INNER JOIN table_c C ON B.RollNo = C.RollNo
GROUP BY A.ID,A.MDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...