表1
id      name1   name2   name3     
1580520 水果 苹果 上海
1580521 水果 苹果 上海
1580522 水果 香蕉 上海
1580523 水果 香蕉 上海
1580524 水果 香蕉 上海
1580525 水果 香蕉 北京
1580526 水果 橘子 上海 表1数据如上所示,现在要统计这个表中的数据将其插入到表2中
表2有这些字段 id,name1,name2,name3,name4,name5
id主键,name1存表1中id最小的值,name2存表1中id最大的值,name3存表1中的name1,name4存表1中的name2,name5存表1中的name3即表2的结果为
id  name1   name2   name3 name4 name5
1   1580520 1580521 水果  苹果 上海
2   1580522 1580524 水果  香蕉 上海
3   1580525 1580525 水果  香蕉 北京
4   1580526 1580526 水果  橘子 上海

解决方案 »

  1.   

    --??insert into 表2 (name1,name2,name3,name4,name5 )select min(id),max(id),name1,  name2,  name3    
    from 表1
    group by name1,  name2,  name3    
      

  2.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-26 16:54:50
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#TB
    if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB([id] int,[name1] varchar(4),[name2] varchar(4),[name3] varchar(4))
    insert #TB
    select 1580520,'水果','苹果','上海' union all
    select 1580521,'水果','苹果','上海' union all
    select 1580522,'水果','香蕉','上海' union all
    select 1580523,'水果','香蕉','上海' union all
    select 1580524,'水果','香蕉','上海' union all
    select 1580525,'水果','香蕉','北京' union all
    select 1580526,'水果','橘子','上海'
    --------------开始查询--------------------------select MIN(ID),MAX(ID),NAME1,NAME2,NAME3 from #TB GROUP BY NAME1,NAME2,NAME3
    ----------------结果----------------------------
    /* (所影响的行数为 7 行)                        NAME1 NAME2 NAME3 
    ----------- ----------- ----- ----- ----- 
    1580526     1580526     水果    橘子    上海
    1580520     1580521     水果    苹果    上海
    1580525     1580525     水果    香蕉    北京
    1580522     1580524     水果    香蕉    上海(所影响的行数为 4 行)
    */改插入就行了
      

  3.   

    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    create table [tb]([id] int,[name1] varchar(4),[name2] varchar(4),[name3] varchar(4))
    go
    insert [tb]
    select 1580520,'水果','苹果','上海' union all
    select 1580521,'水果','苹果','上海' union all
    select 1580522,'水果','香蕉','上海' union all
    select 1580523,'水果','香蕉','上海' union all
    select 1580524,'水果','香蕉','上海' union all
    select 1580525,'水果','香蕉','北京' union all
    select 1580526,'水果','橘子','上海'select min(id),max(id), 
    [name1],[name2],[name3]
    from [tb]
    group by [name1],[name2],[name3]
    order by min(id)
    --------------------------1580520 1580521 水果 苹果 上海
    1580522 1580524 水果 香蕉 上海
    1580525 1580525 水果 香蕉 北京
    1580526 1580526 水果 橘子 上海
      

  4.   

    insert into
     表2 (name1,name2,name3,name4,name5 ) 
    select
     min(id),max(id),name1,  name2,  name3    
    from
     表1 
    group by
     name1,  name2,  name3 
      

  5.   

    boss说原来的表数据量太大了,让这样做是为了减少数据量
      

  6.   


    这种方法如果遇到这种情况就不成立了id      name1   name2   name3
    1580520 水果 苹果 上海
    1580521 水果 苹果 上海
    1580522 水果 香蕉 上海
    1580523 水果 香蕉 上海
    1580524 水果 香蕉 上海
    1580525 水果 香蕉 北京
    1580526 水果 橘子 上海 
    1580527 水果 苹果 上海
    1580528 水果 苹果 上海这样我要的结果应该是
    id  name1   name2   name3 name4 name5
    1   1580520 1580521 水果  苹果 上海
    2   1580522 1580524 水果  香蕉 上海
    3   1580525 1580525 水果  香蕉 北京
    4   1580526 1580526 水果  橘子 上海 
    5   1580527 1580528 水果  苹果 上海
      

  7.   

    ----------------------------------------------------------------
    -- Author  :SQL77(只为思齐老)
    -- Date    :2010-01-26 18:05:30
    -- Version:
    --      Microsoft SQL Server  2000 - 8.00.194 (Intel X86) 
    -- Aug  6 2000 00:57:48 
    -- Copyright (c) 1988-2000 Microsoft Corporation
    -- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:#TB
    if object_id('tempdb.dbo.#TB') is not null drop table #TB
    go 
    create table #TB([id] int,[name1] varchar(4),[name2] varchar(4),[name3] varchar(4))
    insert #TB
    select 1580520,'水果','苹果','上海' union all
    select 1580521,'水果','苹果','上海' union all
    select 1580522,'水果','香蕉','上海' union all
    select 1580523,'水果','香蕉','上海' union all
    select 1580524,'水果','香蕉','上海' union all
    select 1580525,'水果','香蕉','北京' union all
    select 1580526,'水果','橘子','上海' union all
    select 1580527,'水果','苹果','上海' union all
    select 1580528,'水果','苹果','上海'
    --------------开始查询--------------------------
    ALTER TABLE #TB ADD IDD INTDECLARE @IDD INT,@NAME1 varchar(4),@NAME2 varchar(4),@NAME3 varchar(4)
    SET @IDD=0
    UPDATE #TB SET 
    IDD=@IDD,
    @IDD=CASE WHEN NAME1=@NAME1 AND NAME2=@NAME2 AND NAME3=@NAME3 THEN @IDD ELSE @IDD+1 END,
    @NAME1=NAME1 , @NAME2=NAME2 , @NAME3=NAME3--SELECT * FROM #TBselect IDD,MIN(ID)NAME1,MAX(ID)NAME2,NAME1,NAME2,NAME3 from #TB t GROUP BY IDD,NAME1,NAME2,NAME3----------------结果----------------------------
    /* 
    IDD         NAME1       NAME2       NAME1 NAME2 NAME3 
    ----------- ----------- ----------- ----- ----- ----- 
    1           1580520     1580521     水果    苹果    上海
    2           1580522     1580524     水果    香蕉    上海
    3           1580525     1580525     水果    香蕉    北京
    4           1580526     1580526     水果    橘子    上海
    5           1580527     1580528     水果    苹果    上海(所影响的行数为 5 行)
    */
    这是我以前问过的,呵呵,今天又用了