关于SQL语句中DISTINCT关键字的问题

yuxi007 2005-09-29 04:51:00
我有个很奇怪的问题,想请教一下:一开始我使用:"select DISTINCT Code,ConName,AreaID,ID from CouItem where BatchID=" & bID & " order by Code"来从数据库中提取数据,得到了正确的数据,对于得到的数据中,没有了Code字段的重复项,可是过了几天,什么也没有改动的情况下,DISTINCT关键字好象没有了一样,不起作用了,Code字段里重复项出现了,这是什么问题,怎么处理?谢谢!
...全文
628 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
henrysap 2005-10-06
  • 打赏
  • 举报
回复
根本就是业务上的问题,没有什么技术的问题.
根本都不知道楼主要什么样的数据,怎样回答????????
hamadou 2005-09-30
  • 打赏
  • 举报
回复
一个纯粹的SQL语句的问题,可以考虑楼上有人说的group by ,对select中取max的方法,或者考虑使用:类似如下的语句:
select * from a_dis a where not exists(select * from a_dis where name=a.name and id<a.id)
foxconn_nich 2005-09-29
  • 打赏
  • 举报
回复
也许你可能把语句做两次写,第一次distinct取code,然后再用语句取每一个code对应的记录
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
感谢楼上各位,明天再说,要走了(还有其它事呢)
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
ivee(ivee):对,我需要的就是这样,因为只要Code相同,我的业务就是相同的,名称相同,不一定就是相同的业务
ivee 2005-09-29
  • 打赏
  • 举报
回复
矛盾出在这儿:你希望得到不同的CODE,每个CODE只需一个(是这样么?),然而每个CODE又有可能对应着多个不同的ConName、AreaID,那么你要取哪一条呢?
ivee 2005-09-29
  • 打赏
  • 举报
回复
那你Select distinct Code, ConName From ....不就行了吗?
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
alphaqxm(菜菜)(装修中):"select Code,max(ConName),max(AreaID),max(ID) from CouItem where BatchID=" & bID & " group by Code"这一句不行呀,我需要这几个字段的,这样一来,就只有Code字段了
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
其实这是一个业务表,ID只是一个主键,是不会相同的,Code是业务代码,ConName是业务名称,AreaID是不同地方(机器)的代码,Code不同,但有可能名称是相同的,在我想要得到的数据中,我只关心我做了哪些种类的业务,所以才需要这样的SQL语句;感谢楼上名位!!!
alphaqxm 2005-09-29
  • 打赏
  • 举报
回复
"select Code,max(ConName),max(AreaID),max(ID) from CouItem where BatchID=" & bID & " group by Code"
ivee 2005-09-29
  • 打赏
  • 举报
回复
那如果CODE相同,其它项(除ID)不同,你是取一条还是都取出来?如果取一条,那应该取哪一条呢?
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
嗯,是的
我的意思是:我表中的数据除ID不同外,其它都有可能相同,可是我只要取出Code字段不同的项,其它的可以相同,也可以不同,请问一下,我要怎么做才能得到我想要的数据
ivee 2005-09-29
  • 打赏
  • 举报
回复
>>ivee(ivee):可是我使用上面我写的这一句,得到的答案也不是唯一的呀,它将表中的所有行都给我
>>提取出来了

没错啊,你的ID不同吧?那四个字段组合起来每一行都不一样,也就是说得到的结果肯定没有四个字段的值都完全相同的。
alphaqxm 2005-09-29
  • 打赏
  • 举报
回复
你现在数据库里肯定有一个Code对应多个ConName,AreaID,ID吧,就看你想怎么取了。
ivee 2005-09-29
  • 打赏
  • 举报
回复
是不是业务逻辑有问题或者数据结构设计不妥?既然存在Code相同,ConName,AreaID,ID不同的多个记录,你要取哪一条记录呢?
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
ivee(ivee):可是我使用上面我写的这一句,得到的答案也不是唯一的呀,它将表中的所有行都给我提取出来了
ivee 2005-09-29
  • 打赏
  • 举报
回复
DISTINCT 是保证所有选择列组合在一起唯一,而不是单指紧跟DISTINCT后面的那一列。
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
alphaqxm(菜菜)(装修中):怎样使用group by,能不能指点一下,多谢
yuxi007 2005-09-29
  • 打赏
  • 举报
回复
多谢楼上两位的回答;
原来的数据与现在的相差不大,原来的就对了,现在不对了
可是我需要表中的这几个字段呀,如果我将DISTINCT关键字及Code移后的话,又出现系统错误,真不知道要怎样处理才行
alphaqxm 2005-09-29
  • 打赏
  • 举报
回复
可以考虑用group by
加载更多回复(2)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧