这是我的原始表:
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
非常感谢。
发布于 2014-04-23 01:14:33
像这样的东西应该会给你一个你想要标记的列表,从中你可以创建更新...
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...
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)
发布于 2014-04-23 03:22:07
好的。我是在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),但这应该与更新数据无关。
我在寻找其他的解决方案。
顺便说一句。"Name“和"Group”是真正的表列的糟糕名称。应避免在列名和许多其他位置使用保留字。:)
https://stackoverflow.com/questions/23225960
复制相似问题