2017-02-12 43 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