数据库SQL Server 2000
共有记录40万条大概记录如下:编号  数字1  数字2  城市
1     100    200    北京
2     201    300    北京
3     50     150    北京
4     301    400    上海
…………………………
…………………………
现在需要的结果是将数据合并为:编号  数字1  数字2  城市
1     50     300    北京
2     301    400    上海就是将重复的数据合并且删除掉.
问题解决马上结帖

解决方案 »

  1.   

    笨办法就是用group by 分组查询后导出结果再把结果导入成一张表但看你的数据合并好象比较奇怪,合并的数据似乎不是单纯的相加吧
      

  2.   

    select min(数字1), max(数字2),城市 from table group by 城市
      

  3.   

    我来提供一个 oracle 的
    SELECT ROWNUM,
           MIN(数字1) OVER(PARTITION BY 城市) AS 数字1,
           MAX(数字2) OVER(PARTITION BY 城市) AS 数字2
      FROM TABLE
      

  4.   

    笨方法:1.临时表过渡:
    insert 临时表 select 数字1 = sum(数字1), 数字2 = sum(数字2), 城市 from 原表 group by 城市2.清空原表:
    truncate table 原表3.编号改为自增字段,插入数据:
    insert 原数据表 select * from 临时表
      

  5.   

    TO:NekChan(骑蜗牛看星星)
    需要合并的条件是这样的:
    1.要合并,首先城市必须是一样的
    2.在记录集中,如果城市一样,且前一条记录的数字2与后一条记录的数字1相邻,那么他们就可以合并,否则不能合并.
      

  6.   

    TO:StarCraft2_King()  freeboy827() 数据合并的原理是:
    比如有数字
    第一条记录:  1、2、3、4、5    简写为:1-5
    第二条记录:  6、7、8、9       简写为:6-9那么合并后的数据为:1-9
      

  7.   

    delete from table where id not in (select 编号 from (select 编号,min(数字1), max(数字2),城市 from table group by 城市))
      

  8.   

    这个应该一句SQL很难搞定首先应该取出" select min(数字1), 城市 from table group by 城市 " 最小的数据,然后递增查找最大的数字2
      

  9.   

    写一个函数来处理
    SQL语句:
    SELECT MIN(数字1) AS 数字1, FC_GET(数字1, 城市) AS 数字2, 城市 FROM TABLE GROUP BY 城市
    函数:(伪代码)
    FC_GET(数字1, 城市)
    {
      DECLARE @num2 int
      SELECT TOP 1 @num2=数字2 FROM TABLE WHERE 数字2>数字1 AND 城市=城市 ORDER BY 数字2
      然后使用 while 一直查找到最高层的数字2
    }
      

  10.   

    TO:chuxue1342(@楚}===天{==========雪饮>) 数据合并的原理是:
    比如有数字
    第一条记录:  1、2、3、4、5    简写为:1-5
    第二条记录:  6、7、8、9       简写为:6-9那么合并后的数据为:1-9
      

  11.   

    --假设你的表名为test
    declare @num1 int,@num2 int,@address char(10)
    declare @num10 int,@num20 int,@address0 char(10)
    declare @id int
    set @id=1
    create table testb (id int,num1 int,num2 int,address char(10))
    declare mycur cursor for select 数字1,数字2,城市 from test order by 城市,数字1
    open mycur
    fetch next from mycur into @num1,@num2,@address
    while @@fetch_status=0
    begin
    fetch next from mycur into @num10,@num20,@address0
    if @num2=@num10-1 and @address=@address0 set @num2=@num20
    else
    begin
    --如果你的表编号设置为自动增加的,则不要插入@id
    insert into testb values (@id,@num1,@num2,@address)
    set @id=@id+1
    set @num1=@num10
    set @num2=@num20
    set @address=@address0
    end
    end
    close mycur
    deallocate mycur
    delete from test
    --如果你的表编号设置为自动增加的,则不要插入编号,用以下注释的语句
    --insert into test select num1,num2,address from testb
    insert into test select * from testb
    drop table testb