sql - 当合并空列时不合并只是插入

标签 sql sql-server

我的表格及其数据如下

CREATE TABLE Sales (Id int ITDENTITY(1,1) NOT NULL,stateid int, district int Sitecount int)

CREATE TABLE Sales1(stateid int, district int,
Sitecount Int)

insert into Sales values (1,2,12)
insert into Sales values (1,3,20)
insert into Sales values (1, NULL, 10) 
insert into Salesi values (1,2,10) 
insert into Salesi values (1,2. 100) 
insert into Select values (1,ULL, 18)

我使用下面的查询来合并

MERGE Sales AS T 
USING (Select stateid, district, Sitecount from Sales1 group by stateid,district) as S
 ON(S.stateid =T.stateld and S.district=T.district) 
 WHEN MATCHED
Then UPDATE SET
T.Sitecount=T.Sitecount+S.Sitecount 

WHEN NOT MATCHED BY TARGET THEN INSERT (stateid,district,Sitecount) VALUES(S stateid, S.district, S.5itecount);

每当我运行查询时,如果匹配的数据所有列都不为空,则仅合并数据, 否则,它将作为新行插入。

如果分区数据为空,需要根据stateid添加sitecount。如何实现。建议我..

最佳答案

您可以在join中使用ISNULL来匹配stateid,如下所示:

MERGE Sales AS T 
USING (Select stateid, district, max(Sitecount) Sitecount from Sales1 group by stateid,district) as S
 ON(S.stateid =T.stateid and isnull(S.district,'')=isnull(T.district, '')) 
 WHEN MATCHED
Then UPDATE SET
T.Sitecount=T.Sitecount+S.Sitecount

WHEN NOT MATCHED BY TARGET THEN INSERT (stateid,district,Sitecount) VALUES(S.stateid, S.district, S.Sitecount);

select * from Sales

另外,请注意,我使用了 max(Sitecount) 来避免 join 中的重复项。请根据您的要求进行更改。

请找到数据库<>fiddle here

关于sql - 当合并空列时不合并只是插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61870567/

相关文章:

java:显示数据库中的元素

sql - iif 语句的数据类型

mysql - 用于将整数插入小数数据字段的标准 SQL?

sql - 如何查找日期之间的状态

sql-server - SQL Server 2016 Management Studio定期更新

sql - 我可以有一个命名整型常量以便在 T-SQL 中跨存储过程使用吗?

mysql - 使用唯一约束更新多行

MySQL MATCH() 与 ()

sql - 如何从开始到今天每 30 天生成一个列表周期

sql-server - 通过 Azure AD MFA 使用 Powershell 连接到 SQL Server