用于MS Access选择2个不同年份记录的SQL查询

用于MS Access选择2个不同年份记录的SQL查询,sql,database,ms-access-2010,Sql,Database,Ms Access 2010,我想问一下,如果存在两个不同年份(2016年和2017年)的多个条目,我们如何查询Access DB?我尝试使用“正常”查询,其中/和,但不准确- SELECT DNum FROM tblNum WHERE (DNum='0000' AND YEAR(DDate)=2016) OR YEAR(DDate)=2017) 示例数据库: [Value] [Date] 1234 1/1/16 1234 1/1/17 4321 1/1/16 4321 1/1/16 4321 2/2/

我想问一下,如果存在两个不同年份(2016年和2017年)的多个条目,我们如何查询Access DB?我尝试使用“正常”查询,其中/和,但不准确-

SELECT DNum
FROM tblNum
WHERE (DNum='0000' AND YEAR(DDate)=2016) OR YEAR(DDate)=2017)
示例数据库:

[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年。任何帮助都将不胜感激。谢谢


干杯,

这在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;

请注意,
,其中
在该查询中并非绝对必要。它确实减少了正在聚合的数据量,这可以提高性能。

您可以使用以下查询:

SELECT a.DNum, a.DDate
FROM tblNum a INNER JOIN tblNum b 
     ON a.DNum = b.DNum AND 
     YEAR(a.DDate) <> YEAR(b.DDate)
如果您不需要
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)

嗨,我试了一下你的第一个例子,效果很好。将使用SUM/IIF对第二个更高级的示例进行一些研究。非常感谢!感谢您提供另一个选项:)
DNum    DDate
1234    2016/01/01
1234    2017/01/17
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