加入2个表我有问题。它可以处理"完全加入"或者"交叉加入",但我无法做到......
这是一个简单的例子: - 2014年:客户"客户1"来公司 - 2015:他的client_id正在改变(更改出现在#client表中) - 2016年:他买了一辆奥迪车(改变出现在#car表中) - 2017年:他用宝马取代了他的奥迪(改变出现在#car表中)
我想要的是一个查询,它给了我4行所有更改和正确的日期,如下图所示:
以防万一,这是SQL代码示例:
drop table #client
drop table #car
create table #client
(
client_name varchar(64),
client_id varchar(64),
date_validity_start date,
date_validity_end date
)
create table #car
(
client_name varchar(64),
car_brand varchar(64),
date_validity_start date,
date_validity_end date
)
insert into #client values('Client 1', 'A', '20140101', '20141231')
insert into #client values('Client 1', 'B', '20150101', '20991231')
insert into #car values('Client 1', 'Audi', '20160101', '20161231')
insert into #car values('Client 1', 'BMW', '20170101', '20991231')
你能帮我解决吗? 非常感谢!
答案 0 :(得分:0)
您可以使用以下查询
SELECT client_name,
client_id,
NULL AS car_brand,
date_validity_start,
date_validity_end
FROM client
UNION ALL
SELECT client_name,
'B' AS client_id,
car_brand,
date_validity_start,
date_validity_end
FROM car;
如有任何问题,请告诉我
答案 1 :(得分:0)
select client.client_name,
client.client_id,
null,
client.date_validity_start,
client.date_validity_end
from #client client
union
select car.client_name,
client.client_id,
car.car_brand,
car.date_validity_start,
car.date_validity_end
from #client client
join #car car on client.client_name = car.client_name and
client.date_validity_start < = car.date_validity_start and
client.date_validity_end >= car.date_validity_end