Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于第一个表填充第二个表_Sql_Sql Server - Fatal编程技术网

Sql 基于第一个表填充第二个表

Sql 基于第一个表填充第二个表,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

表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更新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

请告诉我们您尝试了什么,然后问一个关于您不理解的问题。添加了我尝试的代码这是您上一个问题答案中的代码:用于不同的需求。这和这个要求有什么关系?以上是实际要求。我试图做到这一点。所以你知道你发布的代码不是你的代码,不符合新的要求。您尝试过新要求吗?此查询仍然会提供插入类型记录。我将其更改为仅插入更新 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