我有下表months
date (date)
-----------
2016-11-01
2017-12-01
2017-01-01
2017-02-01
2017-03-01
2017-04-01
2017-05-01
...
与表weeklyhours
date (date) | hours (time)
--------------------------
2017-01-01 | 05:00:00
2017-01-03 | 12:00:00
我想要SELECT查询来组合两个表并获得以下输出result
date (date) | hours (time)
--------------------------
2016-11-01 | NULL
2016-12-01 | NULL
2017-01-01 | 05:00:00
2017-02-01 | 05:00:00
2017-03-01 | 12:00:00
2017-04-01 | 12:00:00
2017-05-01 | 12:00:00
...
所以我需要将weekylhours
表加入months
表,但我失败了。我在过去的两个小时里尝试过但没有成功。
我很感谢你的帮助。
答案 0 :(得分:0)
这是一个老问题,但这是一个答案,以防其他人需要它。另外作为注释,初始帖子中有错误。第二个日期应该是2017-03-01而不是2017-01-03(否则没有月度差异)。
总的来说,这取决于“每周小时”是一个累积值。句点值只需要在初始连接中求和,而不必查找最大日期,然后创建第二个连接。
DECLARE @temp_months TABLE(
[mth] [date] NOT NULL
)
DECLARE @temp_weeklyhours TABLE(
[Date] [date] NOT NULL,
[Hours] [time] not null
)
INSERT INTO @temp_months (mth)
VALUES ('2016-11-01'),
('2017-12-01'),
('2017-01-01'),
('2017-02-01'),
('2017-03-01'),
('2017-04-01'),
('2017-05-01')
INSERT INTO @temp_weeklyhours ([Date],[Hours])
VALUES ('2017-01-01','05:00:00'),
('2017-03-01','12:00:00')
SELECT t.mth as [Date], [Hours]
FROM
(
SELECT m.mth, max([Date]) UseDate
FROM
@temp_months as m
LEFT JOIN
@temp_weeklyhours as w
ON m.mth >= w.[Date]
GROUP BY m.mth
) as t
LEFT JOIN
@temp_weeklyhours as h
ON t.UseDate = h.[Date]
ORDER BY t.mth