sql - 查询以将单个或动态查询中所有列的所有空值更新为不为空
问题描述
我正在寻找一个 SQL 查询来更新表 A 中的所有列,该表具有表 C 中的NULL
值的NOT NULL
值,使用表 B 的引用。表 A 中的所有列都应使用单个查询或动态查询进行更新。值应根据列名更新,值不应硬编码。
表 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
表 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 函数更新表。有没有其他选择。
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 语句的集合列表中。
我需要输出表中的所有值以及使用非空值更新的空值。
解决方案
试试下面的脚本 -
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
推荐阅读
- sql - 大查询:使用 between 函数对“日期”使用 case 命令
- javascript - json stringify删除括号外的文本
- android - android.view.View.systemUiVisibility 已弃用。什么是替代品?
- c++ - 如何使用 Gps 和指南针开发对点移动算法
- scope - Stan:函数中的局部作用域
- android - react native mapbox在发布APK中不加载地图
- azure - 将本地 xamarin SQLite 数据库与 Azure 表存储后端同步
- html - 文本换行,css
- javascript - 如何在 javascript (vanilla) 中重放动画 GIF - 没有 JQuery
- ios - 某些 GADUnifiedNativeAdView 不可点击 (AdMob/Swift)