首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MS Access SQL -基于重复的列值和额外条件创建"Flag“列

MS Access SQL -基于重复的列值和额外条件创建"Flag“列
EN

Stack Overflow用户
提问于 2014-04-23 01:06:49
回答 2查看 7.2K关注 0票数 0

这是我的原始表:

代码语言:javascript
复制
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“列设置标志,但代码返回一个错误:

代码语言:javascript
复制
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

但这很好用。

代码语言:javascript
复制
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

非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2014-04-23 01:14:33

像这样的东西应该会给你一个你想要标记的列表,从中你可以创建更新...

代码语言:javascript
复制
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使用的是+还是&--在哪里需要使用blank,或者您将空白年龄设置为true...

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-04-23 03:22:07

好的。我是在Access 2010中这样做的。

此查询返回要排除的键:

代码语言:javascript
复制
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“。

要更新标志,我正在尝试以下查询:

代码语言:javascript
复制
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),但这应该与更新数据无关。

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

顺便说一句。"Name“和"Group”是真正的表列的糟糕名称。应避免在列名和许多其他位置使用保留字。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23225960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档