Ms Access SQL 如何消除重复值
Ms Access SQL How to eliminate duplicate values
我在这里查看了太多看起来相似的帖子,以至于我的头在旋转,但 none 似乎解决了这个特定问题,但这可能是我不明白答案。
由于在 c Table 上的连接,下面的查询产生了包含重复 s.ID 记录的结果。消除结果集中具有重复 s.ID 值的行的最佳方法是什么?我宁愿用 MAX(c.ID) 保留那些重复记录并消除其他记录。
Select (o.fld1 & ' ' & o.fld2) as Name,
g.name,
(Select Count(*) from sd where s.ID=sd.ID) as TheCount,
sm.*,
l.name,
t.name,
s.ID,
s.name,
c.ID
From ((((((
s Inner Join c on s.fld2=c.fld2)
Inner Join o on s.oID=o.ID)
Inner Join g on s.gID=g.ID)
Left Join sm on s.smID=sm.ID)
Inner Join l on s.lID=l.ID)
Inner Join t on s.tID=t.ID)
Where c.fld3 IN (1,3,5)
Order By s.ID ASC, c.ID ASC
这是一种简化,但我认为它抓住了所有核心要素。例如,select 子句有更多项,但至少有一个嵌入的 SQL 查询和一个构造的字段名和一个 'table.*',如示例中;根据用户定义的筛选条件,Where 子句可能会复杂得多。
示例结果行可能是:
s.ID c.ID ...
1 1
1 3
2 3
2 5
我希望结果集中不返回第 1 行和第 3 行。将 MAX(c.ID) 的行保留在重复的 s.ID 行上。
您可以在 where
子句中检查不存在具有更高 c.ID
值
的 s-c 对
Select (o.fld1 & ' ' & o.fld2) as Name,
g.name,
(Select Count(*) from sd where s.ID=sd.ID) as TheCount,
sm.*,
l.name,
t.name,
s.ID,
s.name,
c.ID
From ((((((
s Inner Join c on s.fld2=c.fld2)
Inner Join o on s.oID=o.ID)
Inner Join g on s.gID=g.ID)
Left Join sm on s.smID=sm.ID)
Inner Join l on s.lID=l.ID)
Inner Join t on s.tID=t.ID)
Where not exists (select 1 from s s2 join c c2 on s2.fld2=c2.fld2 WHERE s2.ID=s.ID and c2.ID>c.ID and c2.ID IN (1,3,5))
Order By s.DateAndTime ASC, s.fld9 ASC, c.fld4 ASC
我在这里查看了太多看起来相似的帖子,以至于我的头在旋转,但 none 似乎解决了这个特定问题,但这可能是我不明白答案。 由于在 c Table 上的连接,下面的查询产生了包含重复 s.ID 记录的结果。消除结果集中具有重复 s.ID 值的行的最佳方法是什么?我宁愿用 MAX(c.ID) 保留那些重复记录并消除其他记录。
Select (o.fld1 & ' ' & o.fld2) as Name,
g.name,
(Select Count(*) from sd where s.ID=sd.ID) as TheCount,
sm.*,
l.name,
t.name,
s.ID,
s.name,
c.ID
From ((((((
s Inner Join c on s.fld2=c.fld2)
Inner Join o on s.oID=o.ID)
Inner Join g on s.gID=g.ID)
Left Join sm on s.smID=sm.ID)
Inner Join l on s.lID=l.ID)
Inner Join t on s.tID=t.ID)
Where c.fld3 IN (1,3,5)
Order By s.ID ASC, c.ID ASC
这是一种简化,但我认为它抓住了所有核心要素。例如,select 子句有更多项,但至少有一个嵌入的 SQL 查询和一个构造的字段名和一个 'table.*',如示例中;根据用户定义的筛选条件,Where 子句可能会复杂得多。
示例结果行可能是:
s.ID c.ID ...
1 1
1 3
2 3
2 5
我希望结果集中不返回第 1 行和第 3 行。将 MAX(c.ID) 的行保留在重复的 s.ID 行上。
您可以在 where
子句中检查不存在具有更高 c.ID
值
Select (o.fld1 & ' ' & o.fld2) as Name,
g.name,
(Select Count(*) from sd where s.ID=sd.ID) as TheCount,
sm.*,
l.name,
t.name,
s.ID,
s.name,
c.ID
From ((((((
s Inner Join c on s.fld2=c.fld2)
Inner Join o on s.oID=o.ID)
Inner Join g on s.gID=g.ID)
Left Join sm on s.smID=sm.ID)
Inner Join l on s.lID=l.ID)
Inner Join t on s.tID=t.ID)
Where not exists (select 1 from s s2 join c c2 on s2.fld2=c2.fld2 WHERE s2.ID=s.ID and c2.ID>c.ID and c2.ID IN (1,3,5))
Order By s.DateAndTime ASC, s.fld9 ASC, c.fld4 ASC