Sql 基于第一个表填充第二个表
表a,表B 表A有以下记录 id Name Address phone RecordType ProcessStatus 1 ABC HYD 123 INSERT 4 2 PQR IND 111 INSERT 4 1 ABC NULL 6780 UPDATE 3 下面是我得到的 ID ADDRESS PHONE RECORD_TYPE STATUS 1 ABC 123 UPDATE 3 1 ABC NULL UPDATE 3 ID地址电话记录类型状态 1 ABC 123更新3 1 ABC NULL更新3Sql 基于第一个表填充第二个表,sql,sql-server,Sql,Sql Server,表a,表B 表A有以下记录 id Name Address phone RecordType ProcessStatus 1 ABC HYD 123 INSERT 4 2 PQR IND 111 INSERT 4 1 ABC NULL 6780 UPDATE 3 下面是我得到的 ID ADDRESS PHONE RECORD_TYP
这可能会给你你所需要的
insert into tableC(id, name, address, phone, recordType, processstatus)
SELECT * FROM (
select i.id, CASE WHEN u.name IS NULL THEN i.name ELSE u.name END name
,CASE WHEN u.address IS NULL THEN i.address ELSE u.address END address
,CASE WHEN u.phone IS NULL THEN i.phone ELSE u.phone END phone
,CASE WHEN u.recordType IS NULL THEN i.recordType ELSE u.recordType END recordType
,CASE WHEN u.processstatus IS NULL THEN i.processstatus ELSE u.processstatus END processstatus
from tableA i
left join tablea u on u.id = i.id and u.RecordType = 'UPDATE'
where i.RecordType = 'INSERT'
union
SELECT u.id,u.name,u.address,u.phone,u.RecordType, u.ProcessStatus
FROM tableA u
WHERE NOt EXISTS(SELECT * FROM tableA i where i.id=u.id and i.RecordType = 'INSERT')) f
WHERE f.recordType = 'UPDATE'
order by f.id
请告诉我们您尝试了什么,然后问一个关于您不理解的问题。添加了我尝试的代码这是您上一个问题答案中的代码:用于不同的需求。这和这个要求有什么关系?以上是实际要求。我试图做到这一点。所以你知道你发布的代码不是你的代码,不符合新的要求。您尝试过新要求吗?此查询仍然会提供插入类型记录。我将其更改为仅插入更新 ID ADDRESS PHONE RECORD_TYPE STATUS 1 ABC 123 UPDATE 3 1 ABC NULL UPDATE 3
insert into tableC(id, name, address, phone, recordType, processstatus)
SELECT * FROM (
select i.id, CASE WHEN u.name IS NULL THEN i.name ELSE u.name END name
,CASE WHEN u.address IS NULL THEN i.address ELSE u.address END address
,CASE WHEN u.phone IS NULL THEN i.phone ELSE u.phone END phone
,CASE WHEN u.recordType IS NULL THEN i.recordType ELSE u.recordType END recordType
,CASE WHEN u.processstatus IS NULL THEN i.processstatus ELSE u.processstatus END processstatus
from tableA i
left join tablea u on u.id = i.id and u.RecordType = 'UPDATE'
where i.RecordType = 'INSERT'
union
SELECT u.id,u.name,u.address,u.phone,u.RecordType, u.ProcessStatus
FROM tableA u
WHERE NOt EXISTS(SELECT * FROM tableA i where i.id=u.id and i.RecordType = 'INSERT')) f
WHERE f.recordType = 'UPDATE'
order by f.id