这是我的原始表:
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”以便排除记录,因为我可能会在以后进一步排除标准。
在这种情况下,只排除第一和第二条记录。
更新:
@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
- 更新以显示...更新语句...讨厌那些双字。 - 有一个更好的方法来做到这一点,但没有访问...我很难找出正确的语法。
- 使用和联系我不记得Access是否使用了+或& - where子句,或者你的空白年龄设置为真...
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
)
......两者都不会起作用。它声明它需要一个可更新的查询,这有点令人沮丧,因为我只需要更新Data表的一列。确实,QueryExcludeKeys不可更新(它包含GROUP BY),但这与更新数据无关。
我正在寻找其他解决方案。
另外......“名称”和“组”是真实表列的可怕名称。您应该避免在列名和许多其他地方使用保留字。 :)