用于MS Access选择2个不同年份记录的SQL查询
我想问一下,如果存在两个不同年份(2016年和2017年)的多个条目,我们如何查询Access DB?我尝试使用“正常”查询,其中/和,但不准确-用于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/
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