MS Access SQL - 创建"标记"基于重复列值和额外条件的列

时间:2014-04-22 17:06:49

标签: sql ms-access access-vba countif

这是我的原始表:

Name    Age Group
Paul    20  1
Paul    20  2
Paul    30  3
Paul    30  3
Paul        2
Paul        2
Joe     15  1
Mary    20  3

如何编写MS Access SQL以根据以下条件排除记录?

理想情况下,我想创建一个额外的" Flag"用于填充值的列" True"要排除的记录,因为我可能会在以后进一步排除标准。

  1. 在具有相同"名称":

    的记录中

    (1)他们的" Group"是1或2

    (2)他们的"年龄"是相同但不是空白

  2. 对于具有唯一"名称"的记录,请保持原样

  3. 在这种情况下,只会排除第一和第二条记录。

    更新

    @xQbert,非常感谢你!

    为了方便起见,我想首先为重复设置标记" Paul"列,但代码返回错误:

    UPDATE A
    SET A.Flag = "True"
    FROM
    (
    SELECT Name
    FROM tblTest
    GROUP BY Name
    HAVING COUNT(*) > 1
        ) T INNER JOIN tblTest A ON T.Name = A.Name
    

    但这很好用。

    SELECT A.Name, A.Age, A.Group
    FROM
        (
        SELECT Name
        FROM tblTest
        GROUP BY Name
        HAVING COUNT(*) > 1
        ) T INNER JOIN tblTest A ON T.Name = A.Name
    

    非常感谢。

2 个答案:

答案 0 :(得分:0)

这样的事情会给你一个你想要标记的列表,从中可以创建更新...

SELECT [A].[name], [A].[Age], iif([A].[Group] =1,2,[A].[Group]) gp, count(*)
FROM Raw_table A
WHERE Age is not null and age <> ""
Group by [A].[name], [A].[Age], iif([A].[Group] =1,2,[A].[Group])
having count(*) > 1 

- 更新以显示...更新语句...讨厌那些双字。 - 有更好的方法可以做到这一点,但没有访问权限......我很难找出正确的语法。

- 使用&amp;如果Access使用+或&amp; amp; to contat我不记得 - whereclause需要或你让你的空白年龄设置为真......

UPDATE tblTest set SET A.Flag = "True"
WHERE Name&Age in (SELECT Name&Age
FROM tblTest
WHERE age is not null and age <> ""
GROUP BY Name&Age
HAVING COUNT(*) > 1)

答案 1 :(得分:0)

确定。我在Access 2010中这样做。

此查询返回您要排除的键:

SELECT Name, Age, Count(*) AS Occurs
FROM Data
WHERE Group In (1,2) AND Age Is Not Null
GROUP BY Name, Age
HAVING Count(*)>1;

我将其保存为“QueryExcludeKeys”。

要更新标志,我正在尝试这些查询:

UPDATE Data d, QueryExcludeKeys e
SET d.Flag=True
WHERE d.Name=e.Name AND d.Age=e.Age AND d.Group IN (1,2)

UPDATE Data d
SET d.Flag=(
   d.Group IN (1,2) AND
   EXISTS (
      SELECT * FROM QueryExcludeKeys e
      WHERE e.Name=d.Name AND e.Age=d.Age
   )

......两者都不起作用。它声明它需要一个可更新的查询,这有点令人沮丧,因为我只需要更新Data表的一列。确实,QueryExcludeKeys不可更新(它包含GROUP BY),但这与更新数据无关。

我正在寻找其他解决方案。

作为旁边......“名称”和“组”是真正的表列的可怕名称。您应该避免在列名和许多其他地方使用保留字。 :)