所以我還是新來交叉連接,我很少使用它們。我能夠爲我的問題的第一部分找到答案,但不是第二部分。使用交叉連接格式化查詢結果
我已經得到了結果輸出的佈局,我想,這裏的結果
+-----------+-----------+-------------------------+
| Full Name | cert_type | expiration |
+-----------+-----------+-------------------------+
| Jane Doe | 1 | 2015-09-26 00:00:00.000 |
| Jane Doe | 2 | 2015-04-21 00:00:00.000 |
| Jane Doe | 3 | 2015-12-16 00:00:00.000 |
| John Doe | 1 | 2016-10-06 00:00:00.000 |
| John Doe | 2 | 2015-04-19 00:00:00.000 |
| John Doe | 3 | 2011-04-12 00:00:00.000 |
+-----------+-----------+-------------------------+
這裏是我的查詢操作:
SELECT
[Full Name],
cert_type = X.which,
expiration =
CASE X.which
WHEN '1' THEN [License Exp Date]
WHEN '2' THEN [Med Cert Exp Date]
WHEN '3' THEN [Annual MVR Review Due]
END
FROM employee_data.dbo.EmployeeDataBase
CROSS JOIN (SELECT '1' UNION ALL SELECT '2' UNION ALL SELECT '3') X (which)
WHERE [License Exp Date] BETWEEN GETDATE() AND DATEADD(dd, 7, GETDATE())
OR [Med Cert Exp Date] BETWEEN GETDATE() AND DATEADD(dd, 7, GETDATE())
OR [Annual MVR Review Due] BETWEEN GETDATE() AND DATEADD(dd, 7, GETDATE())
AND [Termination Date] IS NULL
正如你可以看到,即使WHERE
條款仍然存在,它拉動每一個日期,我只想要在WHERE
子句內的給定範圍內的日期。我還希望日期輸出就像他們將如果我將它們設置爲 OUTPUT(VARCHAR(10), date, 101)
如果還有其他問題,請告訴我,我會繼續在這裏工作。感謝您收到的所有幫助!
當你給定的列在你的日期範圍之外時,你想要NULL嗎?如果是這樣,請將該條件移至您的案例表達式。至於輸出格式化的日期,我強烈建議您將格式設置保留在前端,而不是在sql中執行。 –
不,我只希望查詢選擇範圍內的日期。如果它們爲空或超出範圍,那麼我不想選擇它們。 –
您的where謂詞適用於整個行,因此如果任何日期都在您的結果集中的範圍內。解決這個問題的一種方法是讓你的上面的查詢成爲一個cte,然後從上面的cte中選擇where謂詞。那會讓你排除每一行。 –