首页 文章

MS Access SQL - 根据重复的列值和额外条件创建“标志”列

提问于
浏览
0

这是我的原始表:

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或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

非常感谢你 .

2 回答

  • 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
    
    • 更新以显示...更新语句...讨厌那些双字 . - 有一个更好的方法来做到这一点,但没有访问...我很难找出正确的语法 .

    • 使用&contat我不记得Access是否使用或& - 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)
    
  • 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),但这与更新数据无关 .

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

    另外......“名称”和“组”是真实表列的可怕名称 . 您应该避免在列名和许多其他地方使用保留字 . :)

相关问题