访问查询特定值

时间:2016-05-20 22:39:41

标签: sql ms-access subquery

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

1 个答案:

答案 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之类的操作。

Namereserved 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