下面的查詢一些條件的一定年限選擇虛擬數據返回僱員的所有ExceptionDays:我需要生成開始的招聘年份虛擬ExceptionDays基於從主查詢
SELECT
idEmployee, idExceptionDayType,
YEAR(startDate) year,
SUM (days) total
FROM
ExceptionDays ed
GROUP BY idEmployee, idExceptionDayType, YEAR(startDate)
僱員直到今年。如果當前員工的ExceptionDays表中已存在一年,則此子查詢不應創建虛擬數據。
因此,基本上,如果僱員在2010年被僱用,並且它僅在2014年和2015年的ExceptionDays表中有數據,則查詢應該返回2010,2011,2012,2013作爲虛擬數據,2014和2015年應該獲得有效的數據。
爲了生成虛擬數據我用了兩年的臨時日曆:
SELECT
1 as idEmployee,1 as idExceptionDayType,YEAR(c.date) year,0 total
FROM
TMP_CALENDAR c WITH (NOLOCK)
WHERE
YEAR(c.date) >= 2012
AND YEAR(c.date) < YEAR(GETDATE())
GROUP BY YEAR(c.date)
這第二子查詢應該以某種方式被連接到第一查詢和期望查詢將變成:
SELECT
ED.idEmployee,1 as idExceptionDayType,YEAR(c.date) year,0 total
FROM
TMP_CALENDAR c WITH (NOLOCK)
JOIN Employees E ON ED.idEmployee = E.idEmployee
WHERE
YEAR(c.date) >= YEAR(e.hiringDate)
AND YEAR(c.date) < YEAR(GETDATE()) AND YEAR <> YEAR(ed.year)
GROUP BY YEAR(c.date)
我們可以看到ED引用第一個查詢是需要的,所以查詢會變得有效,但我不知道我應該怎麼做。
有人可以幫我一點點嗎? 在此先感謝,