[英]Union Query of Date Fields in MS Access 2010
我在包含三個字段的數據表TableofDates中有條目; ProjectID(類型= dbText),開始(類型= dbDate)和完成(類型= dbDate):
TableofDates
ProjectID Start Finish
ABC 01/01/2018 09/09/2018
我想用單獨的DateA記錄(源自[TableofDates]中的[開始])和DateB記錄(源自[TableofDates]中的[Finish]形式)呈現以下數據集
托德聯盟
ProjectID DateA DateB
ABC 01/01/2018
ABC 09/09/2018
以下SQL查詢幾乎產生所需的結果:
SELECT ProjectID,DateA, '' AS DateB
FROM DtA
UNION SELECT ProjectID, '' AS DateA,DateB
FROM DtB;
我的問題是插入的空字符串會強制字段數據鍵入dbText。
相反,如果我插入Null,則只會復制出第一個日期字段:
SELECT ProjectID, DateA, Null AS DateB
FROM DtA
UNION SELECT ProjectID, Null AS DateA, DateB
FROM DtB;
收益率:
ToD UNION
ProjectID DateA DateB
ABC 01/01/2018
ABC
聯盟的兩個部分分別工作:
SELECT ProjectID,DateA, Null AS DateB
FROM DtA;
產量
ToD UNION
ProjectID DateA DateB
ABC 01/01/2018
而
SELECT ProjectID,Null AS DateA, DateB
FROM DtB;
產量
ToD UNION
ProjectID DateA DateB
ABC 09/09/2018
有什么想法可以根據需要創建帶有插入的“空”日期的TableofDates聯合,並在結果數據集中維護dbDate的數據類型?
您可以使用標題行(選擇語句返回0條記錄,但包含正確的類型和標簽)
SELECT CLng(1) As ProjectID, #2001-01-01# As DateA, #2001-01-01# As DateB
FROM MSysObjects
WHERE 1=0
UNION ALL
SELECT ProjectID, DateA, Null
FROM DtA
UNION ALL
SELECT ProjectID, Null, DateB
FROM DtB;
您的查詢不起作用,因為在Access中,聯合查詢的第一個查詢確定字段的類型和標簽。 由於第一個查詢的最后一列僅包含Null
,因此Access無法確定字段類型,並選擇錯誤的字段類型。
通過使用不返回記錄但顯式設置字段類型的查詢,可以避免該問題。
請注意,將UNION
(類型轉換並檢查重復項)更改為UNION ALL
(不執行這些操作)也可以解決此問題。 所以2個解決方案的價格為1。
Union查詢將忽略字段別名,但第一個SELECT語句中的別名除外。
NULL值小於任何日期值,因此降序排序會將NULLS放在第一位。
此SQL生成您的示例輸出:
SELECT ProjectID, Start AS DateA, NULL AS DateB
FROM TableOfDates
UNION ALL SELECT ProjectID, NULL, Finish
FROM TableOfDates
ORDER BY ProjectID, DateA DESC
該表:
ProjectID Start Finish
ABC 01/01/2018 09/09/2018
DEF 01/02/2017 03/05/2018
產生了這個結果:
ProjectID DateA DateB
ABC 01/01/2018
ABC 09/09/2018
DEF 01/02/2017
DEF 03/05/2018
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.