Date Name Charge
1/15/2015 Alpha 3.39
2/15/2015 Alpha 3.39
2/15/2015 Beta 3.39
2/15/2015 Gamma 2
3/15/2015 Gamma 3
3/15/2015 Alpha 5
4/15/2015 Beta 3.39
如何获取唯一的名称记录,以便仅为指定的表生成仅具有3.39的记录。上表的预期结果仅为'Beta'记录。 Alpha不会出现在结果中,因为它的值为5个月。
类似查询(下方)查询“0”费用,但现在正在尝试“3.39”:
SELECT Name FROM tbl
GROUP BY Name HAVING SUM(Charge) = 0
答案 0 :(得分:1)
我首先选择违反条件的记录(<> 3.39),然后选择不在该组中的所有名称。
SELECT DISTINCT [Name]
FROM tbl
WHERE [Name] NOT IN
(SELECT [Name]
FROM tbl
WHERE Charge <> 3.39)
请注意,使用浮点数进行计算可能会非常棘手,您可能需要执行WHERE Abs(Charge - 3.39) < 0.000001
之类的操作。
Name
是reserved word,因此需要放在方括号中。更好的方法是避免使用这样的字段名称。
修改强>
使用大表时,使用NOT IN无法很好地执行Access。
解决方案应该是将子查询结果插入到具有单个列sName
的“临时”表中。
查询1:
DELETE * FROM tTemp
查询2:
INSERT INTO tTemp (sName)
SELECT DISTINCT [Name]
FROM tbl
WHERE Charge <> 3.39
查询3:
SELECT DISTINCT tbl.[Name]
FROM tbl LEFT JOIN tTemp ON tbl.[Name] = tTemp.sName
WHERE tTemp.sName IS NULL