Join 在内部联接中不等于

Join 在内部联接中不等于,join,sql-server-2012,subquery,correlated-subquery,Join,Sql Server 2012,Subquery,Correlated Subquery,我有3个场景要实现 案例1-当IM.Code=IME.Code,IM.Effective\u st\u dt=IME.Effective\u st\u dt,IM.Effective\u end\u dt=IME.Effective-end\u日期 行动- 在这种情况下,我需要用currentMrp和currentCp更新IM 案例2-当IM.Code=IME.Code和IM.Effective\u st\u dt=IME.effective\u st\u dt和IM.effective\u e

我有3个场景要实现

案例1-当IM.Code=IME.Code,IM.Effective\u st\u dt=IME.Effective\u st\u dt,IM.Effective\u end\u dt=IME.Effective-end\u日期

行动- 在这种情况下,我需要用currentMrp和currentCp更新IM

案例2-当IM.Code=IME.Code和IM.Effective\u st\u dt=IME.effective\u st\u dt和IM.effective\u end\u dt=IME.effective-end\u日期

行动- 1.)从IM中选择最近的生效日期记录,并使用(IME.Effective_st_dt)-1更新生效日期

2.)然后从IME中插入一条新记录,该记录具有新的有效时间。该记录lastMRP和lastcp是在1中更新的前一条记录的当前MRP和当前CP

案例3-当IM.Code=IME.Code和IM.Effective\u st\u dt=IME.effective\u st\u dt和IM.effective\u end\u dt=IME.effect-end_日期

行动- 1.)从IM中选择最近的生效日期记录,并使用(IME.Effective_st_dt)-1更新生效日期

2.)然后从IME中插入一条新记录,该记录具有新的有效时间。该记录lastMRP和lastcp是在1中更新的前一条记录的当前MRP和当前CP

这是我的表的脚本

Create Table IM 
(
    ID int idenetity (1,1)
    ,Code varchar(100)
    ,CurrentMrp float
    ,CurrentCP float
    ,lastMrp float
    ,lastCp float
    , effective_st_dt date
    ,effective_end_dt date
)

Create table IME
(
    Code varchar(100)
    ,CurrentMrp float
    ,CurrentCP float
    ,Effective_st_dt date
    ,Effective_end_dt date
)

insert into IM (code, currentMrp, currentCp, lastMRP, lastCP, effective_st_dt, effective_end_dt)
   Select 
      'CA123', 10.12, 5.0, 8.20, 4, '2014-05-01', '2014-05-31'
   union
Select 'CA123',15.0,5.0,10.12,8.20,'2014-06-01','2014-08-31'
union
Select 'CA121',50.0,15.0,45.0,25.0,'2014-04-01','2014-05-31'
union
Select 'CA121',75.0,25.0,50.0,15.0,'2014-06-01','2014-06-30'
union
Select 'CA131',53.0,12.0,35.0,10.0,'2014-05-01','2014-05-31'
union
Select 'CA131',60.0,15.0,53.0,12.0,'2014-06-01','2014-08-31'


Insert into IME (code,effective_st_dt,effective_end_dt)
Select ('CA123',20.0,5.0,'2014-06-01','2014-08-31')
union
Select ('CA123',25.0,6.0,'2014-06-20','2014-08-31')
union
Select ('CA123',35.0,7.0,'2014-07-15','2015-03-31')
请帮我解决这个问题


非常感谢您的帮助

在这种特殊情况下,最好使用左连接而不是内部连接,否则不等于将不会给出正确的结果