首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 再来看看 [已结贴,结贴人:pglsyh]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 18:04:25 楼主
    表中有上千条记录,字段1和字段2 有部分记录交叉相等
    表A 
    字段1  字段2  字段3 
    aaa    bbb    1 
    ddd    fff    2 
    bbb    aaa    2
    aaa    cccc  3
    针对表中这种交叉相等的记录,如上表,第一行和第四行交叉相等,如何把字段3的值相加并删除这两行其中一行
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liangCK
    • 等级:
    发表于:2008-05-08 18:06:371楼 得分:0
    上千条..太小了..不用强调这一点.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fuanwei
    • 等级:
    发表于:2008-05-08 18:14:502楼 得分:0
    SQL code
    select 字段1, (select top 1 (字段2) from 表A as b where a.字段1=b.字段1) as 字段2, (select sum(字段3) from 表A as b where a.字段1=b.字段1 order by 字段1 asc) as 字段3 from 表A as a group by 字段1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ranzj
    • 等级:
    发表于:2008-05-08 18:15:233楼 得分:0
    引用楼主 pglsyh 的帖子:
    表中有上千条记录,字段1和字段2 有部分记录交叉相等 
    表A 
    字段1  字段2  字段3 
    aaa    bbb    1 
    ddd    fff    2 
    bbb    aaa    2
    aaa    cccc  3
    针对表中这种交叉相等的记录,如上表,第一行和第四行交叉相等,如何把字段3的值相加并删除这两行其中一行


    楼主是不是说的是“第一行”和“第三行”啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ranzj
    • 等级:
    发表于:2008-05-08 18:17:334楼 得分:0
    另问:
    (A)仅是查询集中过处理“字段1”“和字段2”交叉相等的记录为一条并将取其“字段3”值之和?
    (B)还是,直接把物理记录搞成那样?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cson_cson
    • 等级:
    发表于:2008-05-08 18:31:285楼 得分:20
    SQL code
    select a.c1,a.c2,a.c3+b.c3 from (select c1,c2,sum(c3) c3 from tb group by c1,c2) a , (select c1,c2,sum(c3) c3 from tb group by c1,c2) b where a.c1 = b.c2 and a.c2 = b.c1 and a.c1>a.c2


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cson_cson
    • 等级:
    发表于:2008-05-08 18:35:276楼 得分:0
    如果要全部记录:
    SQL code
    select a.c1,a.c2,a.c3+b.c3 from (select c1,c2,sum(c3) c3 from tb a a.c1>a.c2 where exists(select 1 from tb c1=a.c2 and c2 = a.c1) group by c1,c2) a , (select c1,c2,sum(c3) c3 from tb a a.c1<a.c2 where exists(select 1 from tb c1=a.c2 and c2 = a.c1) group by c1,c2) b , where a.c1 = b.c2 and a.c2 = b.c1 union select c1,c2,c3 from tb a where not exists(select 1 from tb c1=a.c2 and c2 = a.c1)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 19:02:127楼 得分:0
    if object_id('A') is not null
      drop table A
    go
    create table A(字段1 varchar(10),字段2 varchar(10),字段3 int)
    insert into A
    select 'aaa',    'bbb',    1  union all
    select 'ddd',    'fff',    2  union all
    select 'bbb',    'aaa',    2  union all
    select 'aaa',    'cccc',  3 

    declare @字段1 varchar(10)
    declare cur cursor for select 字段1 from (select 字段1,count(1) as count_i from A group by 字段1 having count(1)>1) a
    open cur
    fetch next from cur into @字段1
    while(@@fetch_status=0)
      begin
          declare @count int
          select @count=sum(字段3) from A where 字段1=@字段1
          declare @字段2 varchar(10)
          select top 1 @字段2=字段2 from A where 字段1=@字段1
          delete from A where 字段1=@字段1
          insert into A(字段1,字段2,字段3) values(@字段1,@字段2,@count)
          fetch next from cur into @字段1
      end
    close cur
    deallocate cur
    select * from A
    --
    绝对正确
    嗷嗷接分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuyann
    • 等级:
    发表于:2008-05-08 19:45:018楼 得分:0
    一句SQL就行了。
    ==== ====
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuyann
    • 等级:
    发表于:2008-05-11 00:54:019楼 得分:0
    SQL code
    DELETE FROM relation1 FROM relation1 AS a INNER JOIN relation1 AS b ON a.c1 = b.c2 and a.c2 = b.c1 WHERE a.c1>a.c2;
    ==== ====
    修改 删除 举报 引用 回复

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