表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 水果 橘子 上海
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 水果 橘子 上海
from 表1
group by name1, name2, name3
-- 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 行)
*/改插入就行了
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 水果 橘子 上海
表2 (name1,name2,name3,name4,name5 )
select
min(id),max(id),name1, name2, name3
from
表1
group by
name1, name2, name3
这种方法如果遇到这种情况就不成立了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 水果 苹果 上海
-- 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 行)
*/
这是我以前问过的,呵呵,今天又用了