下面是我输入的一些代码以及与所述代码有关的一些注释,我试图提供所涉及的三个表的详尽描述。
这是我用来“链接”完成此过程所涉及的三个表的select / join。
select * from SMI.dbo.API api
left outer join FM.dbo.MP mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID
API-有PEID,MaidenName,DOB和出生地
MP或MPI-具有PEID,FIDID,FI,MI和姓氏的新娘&新郎。
SIP-有一个FIDID,这是目的地表
在API中,每条记录都有一个人的PEID,以及他们的婚前姓(如果他们是女性)他们的DOB,以及他们的出生地。此表中还包括“性别”字段..(I.E. M,F,U)
在MPI字段中,每个记录对每个人都有相同的PEID;但它也包含一个与每个记录相关联的FIDID。因此,在此表中,您会发现总记录数几乎是其他两个表总数的两倍。这是因为您收到了新娘和新郎的记录。
在SIP中,您将找到与每次婚姻有关的大部分索引信息,最重要的是FIDID。
范围:此查询的最终目标是将MaidenName,BirthDates和BirthPlaces插入SIP表,同时区分M& F。
话虽如此,由于目标表(SIP)和源表(API)之间没有直接链接,我觉得加入API和 (MPI)将是“弥合”这一差距的最佳方法。
由于我只有一个PEID,我需要查看“性别”字段,以确定特定记录是否与新娘或新郎(M或F)有关,找到特定记录的PEID&性别,然后查询应该继续下一步通过PEID从(MPI)定位FIDID,然后它应该相应地将MaidenName,BirthDates和BirthPlaces插入SIP。
我意识到下面代码的语法完全不受欢迎。我主要是在试图想象我需要做什么的时候输入它。
USE [SMI]
GO
SELECT * from SMI.dbo.API api
left outer join FM.dbo.MPI mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID
CASE
((( WHEN api.PEIDs = mpi.PEID and mpi.FIDID = sip.FIDID
(THEN
Update SIP
set groomdob = api.birthdate, GroomBirthPlace = api.birthplace
where api.gender like 'M')
and
((Update SIP
set bridedob = api.birthdate, BrideBirthPlace = api.birthplace, BrideMaidenName = api.birthlastname
where api.gender like 'F' ))
ELSE null)))
END
FROM SMI.dbo.API api
ORDER BY PEIDs ;
GO
提前感谢你们所提供的任何帮助。
答案 0 :(得分:0)
UPDATE SMI.dbo.SIP s
inner join (select * from SMI.dbo.API api
left outer join FM.dbo.MP mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID WHERE api.gender like 'm') m
on s.FID = m.FID
SET s.groomdob = m.birthdate, s.GroomBirthPlace = m.birthplace
UPDATE SMI.dbo.SIP s
inner join (select * from SMI.dbo.API api
left outer join FM.dbo.MP mpi on api.PEIDS = mpi.PEID
inner join SMI.dbo.SIP sip on mpi.FIDID = sip.FIDID WHERE api.gender like 'f') as f
on f.FID = s.FID
set s.bridedob = f.birthdate, s.BrideBirthPlace = f.birthplace,
s.BrideMaidenName =f.birthlastname