我有3张桌子
CUS_ID CUS_NAME CUS_CNTRY
C1 Ajay India
C2 Anthony India
C3 Scott Australia
C4 David UK
C5 Lisa India
C6 Mark Australia
C7 Mary Australia
C8 Walter UK
BRCH_ID BRCH_NAME BRCH_STATE
B1 JP NAGAR KARNATAKA
B2 JAYANAGAR KARNATAKA
B3 DISPUR ASSAM
B4 CUTTACK ORISSA
B5 CHANDIGARH PUNJAB
BRCH_ID CUS_ID RLTSHP_START_DATE RLTSHP_END_DATE
B1 C1 1/1/2011 23/12/2011
B1 C4 24/12/2011 4/4/2012
B1 C2 21/12/2011 1/1/2012
B2 C7 2/1/2012 4/4/2012
B3 C4 5/4/2012 31/12/2999
B3 C3 5/7/2010 8/8/2011
B4 C5 9/8/2011 9/4/2012
B4 C6 6/4/2012 31/12/2999
B2 C8 7/1/2009 8/4/2012
B5 C1 24/12/20 31/12/2999
B5 C8 9/4/2012 31/12/2999
我想找出在2012年4月份从一个分支机构转移到另一个分支机构的客户。还显示从客户转移到哪个分支机构的分支机构。
我尝试使用case
语句,但没有成功。现在我有了这个查询
select b.cus_id, b.brch_id, b1.brch_id
from brch_cus b inner join brch_cus b1 on
b.brch_id=b1.brch_id
where
b.rltshp_start_date=DATEADD(day, 1,b1.rltshp_end_date)
预期结果
Cus_id moved_from_branch moved_to_branch
C4 B1 B3
C8 B2 B5
答案 0 :(得分:2)
这样的事情应该有效:
;with started as (
select *
from brch_cus
where rltshp_start_date >= '20120401' and rltshp_start_date < '20120501'
),
ended as (
select *
from brch_cus
where rltshp_end_date >= '20120401' and rltshp_end_date < '20120501'
)
select c.cus_id, b_from.brch_id as moved_from_branch, b_to.brch_id as moved_to_branch
from started s
inner join ended e on s.cus_id = e.cus_id and s.brch_id <> e.brch_id
and s.rltshp_start_date = dateadd(day, 1, e.rltshp_end_date)
inner join cus c on s.cus_id = c.cus_id
inner join brch b_from on e.brch_id = b_from.brch_id
inner join brch b_to on s.brch_id = b_to.brch_id
答案 1 :(得分:0)
我得到了答案..
select a.*, b.*
from
(select cus_id, brch_id as moved_from_branch
from brch_cus
where rltshp_end_date between '2012-04-01' and '2012-04-30')a
inner join
(select cus_id, brch_id as moved_to_branch
from brch_cus
where rltshp_start_date between '2012-04-01' and '2012-04-30')b
on a.cus_id=b.cus_id;