MS Access SQL-基于重复列值和额外条件创建“标志”列

MS Access SQL-基于重复列值和额外条件创建“标志”列,sql,vba,ms-access,countif,Sql,Vba,Ms Access,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以排除记录 理想情况下,我希望创建一个附加的标志列来填充要排除的记录的值True,因为稍后可能会有进一步的排除条件 在具有相同名称的记录中: 1他们的组是1或2 2他们的年

这是我的原始表格:

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以排除记录

理想情况下,我希望创建一个附加的标志列来填充要排除的记录的值True,因为稍后可能会有进一步的排除条件

在具有相同名称的记录中:

1他们的组是1或2

2他们的年龄相同,但不是空白

对于具有唯一名称的记录,保留原样

在这种情况下,仅排除第一条和第二条记录

更新:

@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

非常感谢。

类似的内容应该会为您提供要标记的列表,您可以从中创建更新

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 
-更新以显示。。。更新语句。。。我讨厌那些双关语。 -有一种更好的方法可以做到这一点,但不允许访问。。。我很难想出正确的语法

-使用&to contat我不记得Access是否使用+或& -Where子句需要,或者您将空白年龄设置为true

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)

嗯。我在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
   )
。。。这两种方法都行不通。它声明它需要一个可更新的查询,这有点令人沮丧,因为我只需要更新数据表的一列。的确,QueryExcludeKeys是不可更新的,因为它包含一个GROUP BY,但这与更新数据无关

我正在寻找其他解决方案


作为旁白。。。名称和组对于实际表列来说是糟糕的名称。您应该避免在列名和许多其他位置使用保留字:

这听起来有点像家庭作业。。。无论如何您有哪些数据类型列?年龄是文本列还是数字列?使用blank时,您打算使用NULL吗?这不是家庭作业,只是对SQL比较陌生,所以需要一些想法。年龄是数字,银行是空的,但我认为这对答案没有多大影响。谢谢,非常感谢!为了更简单,我想首先为重复的Paul列设置标志,但代码返回一个错误:更新set A.Flag=True,从按名称从tblTest GROUP按名称选择名称,计数>1 T内部连接tblTest A ON T.Name=A.Name但此SELECT查询工作正常:选择A.Name,A.Age,A.从中选择名称从tblTest按名称分组计数>1 T内部连接tblTest A在T上。名称=A。名称您能给我一些指针吗?谢谢,很抱歉,对SQL来说这是一个相当新的概念。这里的问题是名字不是一个足够的键,你需要去掉名字和年龄,否则你的空白pauls将是真实的。我的MS Access知识已经15岁以上了,所以去掉它是一个挑战。我不确定你是否能像上面列出的那样进行更新。我已经修改了我的回复,以获得更新声明。同样,它可能会起作用;也可能不是。