2017-02-12 44 views
0

我想問一下,如果有多個條目有2個不同年份(2016 & 2017),我們如何查詢Access數據庫?我曾嘗試使用WHERE '正常' 查詢/ AND但其並不準確 -對MS Access的SQL查詢要選擇2個不同年份記錄

SELECT DNum 
FROM tblNum 
WHERE (DNum='0000' AND YEAR(DDate)=2016) OR YEAR(DDate)=2017) 

樣品DB:

[Value] [Date] 
1234 1/1/16 
1234 1/1/17 
4321 1/1/16 
4321 1/1/16 
4321 2/2/16 

1234將是 '真',因爲它發生2016年& 2017年任何幫助將不勝感激。謝謝。

歡呼,

回答

1

這在MS Access中可能有點棘手。這裏有一個方法,兩年的工作原理:

SELECT DNum 
FROM tblNum 
WHERE YEAR(DDate) IN (2016, 2017) 
GROUP BY DNum 
HAVING MIN(YEAR(DDATE)) = 2016 AND MAX(YEAR(DDate)) = 2017; 

如果你有幾年的任意號碼,您可以用更復雜的HAVING條款做到這一點:

SELECT DNum 
FROM tblNum 
WHERE YEAR(DDate) IN (2015, 2016, 2017) 
GROUP BY DNum 
HAVING SUM(IIF(YEAR(DDATE) = 2015, 1, 0) > 0 AND 
     SUM(IIF(YEAR(DDATE) = 2016, 1, 0) > 0 AND 
     SUM(IIF(YEAR(DDATE) = 2017, 1, 0) > 0; 

注意,WHERE不在此查詢中嚴格需要。它確實減少了正在聚合的數據量,這可以提高性能。

+0

您好,我試試你的第一個例子,它完美的作品。將使用SUM/IIF對您的第二個更高級示例進行一些研究。非常感謝! – aboka

0

您可以使用此查詢:

SELECT a.DNum, a.DDate 
FROM tblNum a INNER JOIN tblNum b 
    ON a.DNum = b.DNum AND 
    YEAR(a.DDate) <> YEAR(b.DDate) 

您可以根據以下過濾:

SELECT a.DNum, a.DDate 
FROM tblNum a INNER JOIN tblNum b 
    ON a.DNum = b.DNum AND 
    YEAR(a.DDate) <> YEAR(b.DDate) 
WHERE YEAR(a.DDate) in (2016,2017) 

結果:

DNum DDate 
1234 2016/01/01 
1234 2017/01/17 

如果您不需要DDate使用DISTINCT關鍵字避免重複DNum:

SELECT DISTINCT a.DNum 
FROM tblNum a INNER JOIN tblNum b 
    ON a.DNum = b.DNum AND 
    YEAR(a.DDate) <> YEAR(b.DDate) 
WHERE YEAR(a.DDate) in (2016,2017) 

結果:

DNum 
1234 
+0

感謝您的其他選擇:) – aboka