怎样用sql有条件地去除access表中的重复记录(表已设主键)?(100分)

  • 主题发起人 主题发起人 l_q28
  • 开始时间 开始时间
L

l_q28

Unregistered / Unconfirmed
GUEST, unregistred user!
access库中某表如下:
流水号 产品代码 价格
6 B01 10
4 B02 15
12 B07 9
17 B01 11
8 B01 8
......
其中,流水号是主键(不重复),产品代码可重复。
现在想通过sql语句得到以下结果:
产品代码 产品价格
B01 11
B02 15
B07 9
.....
经检索后的结果中,产品代码不再重复,而对应的产品价格是根据条件
《产品代码是B**且流水号最大》
得到的。
如果不使用临时表,能直接用SQL语句得到结果吗?望不吝赐教!
 
Select distinct 产品代码,产品价格=(Select 产品价格 From
Table Where 产品代码=A.产品代码 order by 流水号 desc) From Table A
 
SELECT 流水号,产品代码,产品价格 FROM TableName
WHERE 流水号 IN
(SELECT MAX(流水号) FROM TableName
GROUP BY 产品代码)
 
同意楼上,
select distinct 产品代码 from table.
 
To kingdeezj>>查询得到的结果中产品代码有重复。
To glbboy >>查询时出现错误信息“子查询最多能返回一个记录”
 
SELECT t.流水号,t.产品代码 as code ,t.产品价格 FROM TableName
WHERE 流水号 as t IN
(SELECT top 1 流水号 FROM TableName
where 产品代码=t.code)
 
SELECT AA.流水号,AA.产品代码,AA.产品价格
FROM TableName AA,
(select 产品代码,max(流水号) as tmp from Tablename group by 产品代码) BB
WHERE AA.流水号=BB.tmp
 
To BigTall>>语法错误;
To QuitckSilver>>查询结果中产品代码重复.麻烦注意一下<<查询结果不再需要流水号>>
 
不出错的方法就是用左连接了。
 
SELECT AA.产品代码,AA.产品价格
FROM TableName AA,
(select 产品代码,max(流水号) as tmp from Tablename group by 产品代码) BB
WHERE AA.流水号=BB.tmp

这条语句没有错的,你用
SELECT DISTINCT 产品代码 FROM Tablename order by 产品代码
试试,估计还是有你认为的代码重复。
 
换句话说,我需要得到是这样一个结果
记录一 产品代码1 产品代码1所对应的流水号最大的记录中的产品价格
记录二 产品代码2 产品代码2所对应的流水号最大的记录中的产品价格
记录三 产品代码3 产品代码3所对应的流水号最大的记录中的产品价格

任何一个产品代码所对应的流水号如果不是该产品代码所对应的流水号中最大的,那么这
条记录就被过滤掉.
说得有点不清楚,请大家包涵
 
SELECT 流水号,产品代码,产品价格 FROM TableName
WHERE 流水号 IN
(SELECT MAX(流水号) FROM TableName
GROUP BY 产品代码)
-----------我也觉得,在这儿我在子查询里得到的每组产品的最大流水号肯定是唯一的。
又何来的重复?
 
To QuickSilver:对,还是有重复.
To 众位大哥:我想的就是把开始例子中的流水号是6和8的记录滤掉,因为B01所对应的最大
流水号是17
 
SELECT DISTINCT 产品代码 FROM Tablename order by 产品代码

这条语句如果得到你所谓的重复的话,只说明一件事
就是那重复的记录中应该有不可见字符。
 
那你可不可以举个例子。
因为你的流水号也是不重复的啊。
我的子查询在对产品代码分组。

B01 相对应的只可能是17,绝不会返回6吧?
 
To QuickSilver>>我再次详细检查了,没有不可见字符.我新建了一个表,只有这三个字段,只输了
例子中的5条记录
 
To kingdeezj>>我查询的结果中不再需要流水号.如果只是例子中的5条记录,
那么查询结果应为
产品代码 产品价格
B01 11
B02 15
B07 9

 
奇怪了,我用ACCESS97建了一个表,输入了你的五条记录。
再用我的SQL检测。
出来的正是你要的结果啊。
难道你取出来的数据不对吗?重在哪儿啦?
我的环境:WIN98+ACCESS97
--------------------不要流水号就把它去掉不就行了--------------------
SELECT 产品代码,产品价格 FROM TableName
WHERE 流水号 IN
(SELECT MAX(流水号) FROM TableName
GROUP BY 产品代码)
 
如果不是不可见字符,也有可能是数字0和字母O(MNOPQ的那个O)搞混了
 
对不住大伙,由于字体的原因,有个o和0混了,kindeezj的方法是对的.
给分先,不多,请笑纳
不过,就此问题,如果条件是找第二大的流水号怎么办?
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
851
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部