Я ищу запрос 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, обновленными с ненулевыми значениями.