-
其中一半是添加一个表,因为我没有你的结果集,所以我把一个表变量放在一起作为结果集。
重点是后半部分,处理逻辑是按照你的意愿编写的,前提是我没有弄错。
此方法的结果集每年返回数据,随着年数的增加,行数基于城市数,但我认为您要求这样的结果集没有意义。
declare @tab table(name nvarchar(20), both int)
declare @tabtmp table(name nvarchar(20), both int)
declare @tabname table(name nvarchar(20))
declare @name nvarchar(20)
declare @both int
insert into @tab
select n'上海',1996
unionselect n'上海',1997
unionselect n'北京',1996
unionselect n'北京', 1997
insert into @tabname
select distinct name from @tab
select top 1 @name=name from @tab order by name asc
select @both=min(both) from @tab
while(@name is not null)
begininsert into @tabtmp
select @name,@both
update @tab set name='' where name=@name
set @name=null
select top 1 @name =name from @tab where name<>'' order by name asc
select top 1 @both=both from @tab where both>@both order by both asc
endselect * from @tabtmp
-
问一个数据库问题来解释你是什么数据库。
数据库的方言之间存在相当多的差异。
如果你愿意,你的问题也不是很清楚。
1996年上海奥运会
1997年上海奥运会
1996年北京奥运会
1997年北京冬奥会
这样,有 2 种方法可以做到这一点。
1) group by
选择客户城市、订单日期。
按客户城市、订购日期分组。
2)选择不同的客户城市,订单日期。
如果上海只有一条记录,北京只有一条记录,可以考虑取一年的最大值或最小值。
tab客户城市订单日期。
1996年上海奥运会
1997年上海奥运会
1996年北京奥运会
1997年北京冬奥会
选择客户城市、订单日期。
from tab t1
其中订单日期 = (从选项卡中选择最大(订单日期)其中 T1。客户城市 = 客户城市)。
Oracle DB2 也可以做到这一点。
选择客户城市、订单日期。
from (选择客户城市、订单日期、行号() over(按客户城市划分 订单日期) rk) t
where rk = 1
-
1.有两个相同的记录。
这是最简单的情况,可以使用关键字 distinct 删除。
示例:从表(表名)中选择 distinct * where (condition)。
2.有相同字段的记录(有主键ID,即唯一键)。
如果是这种情况,则无法使用 distinct 对其进行筛选,这需要主键 ID 和组的唯一性。
example:
select * from table where id in (select max(id) from table group by [de-duplicated field name list,..
3.没有唯一的密钥ID
example:
从表中选择 Identity(int1,1) 作为 id,* 到 newtable(temporal table) 中
select * from newtable where id in (select max(id) from newtable group by [de-duplicated field name list,..
drop table newtable
-
解决如何在Excel Electronic**中查找和删除重复数据的问题。
-
批量重复数据删除
-
如何快速删除重复值?