Sql 查询以将单个或动态查询中所有列的所有空值更新为NOTNULL
我正在寻找一个SQL查询来更新表a中的所有列,其中表C中的Sql 查询以将单个或动态查询中所有列的所有空值更新为NOTNULL,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在寻找一个SQL查询来更新表a中的所有列,其中表C中的NULL值为notnull值,并使用表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
NULL
值为notnull
值,并使用表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
在输出中,表A中的所有NULL
列值都用表C中的NOT NULL
值更新。请提供一个查询来更新单个查询中的所有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语句的集合列表中
我需要输出表中的所有值以及用not null值更新的null值。尝试下面的脚本-
为什么
表C
中的Rollno 11
在应该与Sarah
关联时将Tom
作为名称?到目前为止您尝试了什么?表a 10001中的值在表C中有3个子记录,因为最新的记录有Sarah,所以它将被视为最终记录,而不考虑其他记录。它也适用于所有列。希望您能理解。请直接在问题中添加任何澄清/附加信息@dalek修改了要求。请检查这没有考虑OPs要求,在表中有多个值的情况下使用“最新”值。您的更改令人困惑。对于每个id的最新日期,是否需要表C中的值?@mkRabbani yes需要基于id的最新值,如果最新值具有空值,则应使用下一个非空值进行更新。
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