首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 求一个sql 程序来删除重复值,然后建复合主键。 [已结贴,结贴人:feiery]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 12:37:08 楼主
    求一个sql 程序来删除重复值,然后建复合主键。

    table:

    custno  lineseqno          value
    _______  ________            _____

    2343      3                    DP
    2432      4                    VP
    .....
    (many rows here)
    .....

    2343      3                    IP

    现在要在custnno 和lineseqno上建复合主键。
    但是表里现在custno和lineseqno的组合有重复值,如何用SQL程序来除去重复值(要保留第一个重复值,去掉第二个)
    比如上面的值,就要删掉2343 3 IP这组,保留2343  3 DP 这组。

    多谢了,在线等,急
    !!
    10  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-05-08 12:44:321楼 得分:2
    delete a
    from tb a
      where not exists(select * from tb where a.custno=custno and a.lineseqno=lineseqno and value <a.value)

    alter table tb
      add constraint PK_custno_lineseqno primary key(custno,lineseqno)
    go
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 12:57:582楼 得分:2
    SQL code
    create table #tab (custno int not null,lineseqno int not null,value varchar(2)) insert into #tab values(2343,3,'DP') insert into #tab values(2432,4,'VP') insert into #tab values(2343,3,'IP') DELETE a from #tab a where exists (select 1 from #tab where custno=a.custno and lineseqno=a.lineseqno ) and value<>(select top 1 value from #tab where custno=a.custno and lineseqno=a.lineseqno) select * from #tab alter table #tab add constraint pk_#tab primary key (custno,lineseqno) custno lineseqno value ----------- ----------- ----- 2343 3 DP 2432 4 VP (2 行受影响)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 14:54:423楼 得分:2
    Up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 07:43:474楼 得分:0
    那怎么把重复的值选出来呢?

    select * from table_name a where a.custno=custno and a.lineseqno=lineseqno


    好像不好用啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 08:02:185楼 得分:4
    把重复的内容选出来:

    select * 
    from tb a
      where not exists(select * from tb where a.custno=custno and a.lineseqno=lineseqno and value <a.value)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 08:25:166楼 得分:0
    不好用啊,

    table number: service_number

    service_number

    custno        lineseqno
    _________      _________
    23433          2

    24343            5

    (...1000 rows)

    24343            5

    现在不用管其它的column,就是如在custno和lineseqno这对复合栏里有相同值的话,把相同值选出.

    我用了

    select *  from service_number_extra a where not exists(select * from service_number_extra where a.custno=custno and a.lineseqno=lineseqno )

    结果是把service_number_extra里的所有值都选出来了,哪里不对呢?

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 08:35:077楼 得分:0
    在线等,急啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 09:00:188楼 得分:0
    if exists (select a.* from service_number_extra a,(select custno,lineseqno from service_number_extra group by custno,lineseqno having count(*) >  1)  b
    where a.custno = b.custno and a.lineseqno = b.lineseqno)

    begin
    print 'find duplicates'
    end
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-05-09 09:13:569楼 得分:0
    SQL code
    delete a from tb a where exists(select 1 from tb b where a.custno=b.custno and a.lineseqno=b.lineseqno and a.value<b.value)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ojuju10
    • 等级:
    发表于:2008-05-09 09:16:5710楼 得分:0
    引用 6 楼 feiery 的回复:
    不好用啊,

    table number: service_number

    service_number

    custno        lineseqno
    _________      _________
    23433          2

    24343            5

    (...1000 rows)

    24343            5

    现在不用管其它的column,就是如在custno和lineseqno这对复合栏里有相同值的话,把相同值选出.

    我用了

    select *  from service_number_extra a where not exists(select * from service_number_extra…


    SQL code
    select * from service_number_extra a where exists(select * from service_number_extra b where a.custno=b.custno and a.lineseqno=b.lineseqno group by custno,lineseqno having count(1)>1)


    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved