我有table
:
id date
1 2018-03-20
1 2018-02-05
3 2018-03-18
7 2018-03-12
我有table_2
:
id date_2 value
1 2018-03-20 0
1 2018-03-19 100
1 2018-02-05 50
3 2018-03-18 200
我想加入这些来生成一个看起来像这样的表:
id date date_2 value
1 2018-03-20 2018-03-19 100
1 2018-02-05 2018-02-05 50
3 2018-03-18 2018-03-18 200
7 2018-03-12 NULL NULL
如果date
对应于table_2
中具有非零值的记录,则应返回该记录。如果date
对应于table_2
value
0
或table_2
中不存在的记录,那么最近date_2
的记录应返回{}之前的{}}}(前提是它具有非零值)。
在表格中,date
id
与1
date
相关联的记录与2018-03-20
value
相关联。因此,应返回0
与table_2
date_2
的记录。
我如何加入这些表格才能得出这个结果?
答案 0 :(得分:2)
使用外部申请:
根据ID也是加入的一部分的评论进行编辑
declare @t1 as table (id int, date1 date)
insert into @t1
values
(1, '2018-03-20')
,(3, '2018-03-18')
,(7, '2018-03-12')
declare @t2 as table(
id int, date_2 date ,value int)
insert into @t2
values
(1 ,'2018-03-20', 0 )
,(1 ,'2018-03-19' , 100 )
,(3 ,'2018-03-18', 200)
select t.* ,t2.date_2,t2.value
from @t1 t
outer apply (select top 1 date_2
, value
from @t2 t2
where t2.value>0
and t.date1>=t2.date_2
and t.ID=t2.ID
order by t2.date_2 desc) t2
删除结果集