我有2个表,一个是日期列表,另一个是具有相应开始日期的对象列表。我想加入表格,以便ID出现在日期列表的日期旁边,因为它的开始日期大于或等于对象的开始日期。
Date List ID StartDate Result
29/07/2016 1 29/07/2016 Date ID
31/08/2016 2 29/07/2016 29/07/2016 1
30/09/2016 3 31/08/2016 29/07/2016 2
31/10/2016 4 30/09/2016 31/08/2016 1
30/11/2016 5 30/09/2016 31/08/2016 2
30/12/2016 6 30/09/2016 31/08/2016 3
31/01/2017 7 31/10/2016 30/09/2016 1
28/02/2017 8 31/10/2016 30/09/2016 2
31/03/2017 30/09/2016 3
28/04/2017 30/09/2016 4
31/05/2017 30/09/2016 5
30/06/2017 30/09/2016 6
31/07/2017 31/10/2016 1
31/08/2017 31/10/2016 2
29/09/2017 31/10/2016 3
31/10/2017 31/10/2016 4
30/11/2017 31/10/2016 5
29/12/2017 31/10/2016 6
31/01/2018 31/10/2016 7
31/10/2016 8
我不知道如何使用join语句,因为我只有一个参考点,ID可以与日期列表一起加入。因此,我很难让它出现在除开始日期之外的后续日期。
非常感谢
没什么魔力:
SELECT DateList.Date, ObjectList.ID
FROM ObjectList
INNER JOIN DateList ON ObjectList.StartDate <= DateList.Date
我在这里发布了我的答案我是如何理解你的,但不清楚为什么你的结果不包含大于2016年的日期...
我更改了语言,因为您的日期是依赖于语言的格式,我不想将它们重写为yyyymmdd
set language [British English];
declare @DateList table(dt date);
insert into @DateList values
('29/07/2016'),
('31/08/2016'),
('30/09/2016'),
('31/10/2016'),
('30/11/2016'),
('30/12/2016'),
('31/01/2017'),
('28/02/2017'),
('31/03/2017'),
('28/04/2017'),
('31/05/2017'),
('30/06/2017'),
('31/07/2017'),
('31/08/2017'),
('29/09/2017'),
('31/10/2017'),
('30/11/2017'),
('29/12/2017'),
('31/01/2018');
declare @obj table ( ID int, StartDate date);
insert into @obj values
(1, '29/07/2016'),
(2, '29/07/2016'),
(3, '31/08/2016'),
(4, '30/09/2016'),
(5, '30/09/2016'),
(6, '30/09/2016'),
(7, '31/10/2016'),
(8, '31/10/2016');
select l.*, o.id
from @DateList l join @obj o
on l.dt >= o.StartDate
order by 1;