首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 话语难题,根据一个字段,重复的都给它一个自增编码

2013-08-25 
SQL 语句难题,根据一个字段,重复的都给它一个自增编码。根据一个字段,重复的都给它一个自增编码。如表text:

SQL 语句难题,根据一个字段,重复的都给它一个自增编码。
根据一个字段,重复的都给它一个自增编码。如表text:
字段一      字段二 
80         i
80         h
80         j
···
90         k
90         h
90         i
···

用select语句 增加一个字段三变成:字段三给字段一相同的编序号。
字段一      字段二    字段三
80         i        2
80         h        3
80         j        4
···
90         k        2
90         h        3
90         i        4
····
不知道大神明白了我的意思了没有。根据字段一相同的,给他编号。从2开始编号,在sql server数据库里面的。
真的不好意思,最高只能给一百分。系统限制了。


[解决办法]

create table tb(id int,val varchar(10),id2 int)
insert into tb(id,val)
select 80,'i'
union all select 80,'h'
union all select 80,'j'
union all select 80,'g'
union all select 80,'p'
union all select 80,'x'
union all select 80,'q'
union all select 90,'k'
union all select 90,'h'
union all select 90,'i'
union all select 90,'m'
union all select 90,'t'
union all select 90,'y'


declare @i int,@id int
set @id=0
set @i=1
update tb
set @i=case when @id=id then @i+1 else 2 end,@id=case when @id=id then @id else id end,id2=@i

select * from tb
drop table tb



/*
80i2
80h3
80j4
80g5
80p6
80x7
80q8
90k2
90h3
90i4
90m5
90t6
90y7
*/


[解决办法]
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [字段1] varchar(100), [字段2] varchar(100));
insert #temp
select '80','i' union all
select '80','h' union all
select '80','j' union all
select '90','k' union all
select '90','h' union all
select '90','i' 

--SQL:
select *, rowid=ROW_NUMBER() OVER(PARTITION BY 字段1 ORDER BY GETDATE())+1 from #temp
/*
字段1字段2rowid
80i2
80h3
80j4
90k2
90h3
90i4
*/

[解决办法]

create table #tb(id int,val varchar(10))
insert into #tb(id,val)
select 80,'i' union all
select 80,'h' union all
select 80,'j' union all
select 90,'k' union all
select 90,'h' union all
select 90,'i'

select *,row_number() over (partition by id order by getdate()) +1 re 
from #tb

[解决办法]
引用:
感谢各位,但我用的是sql server2000 row_number()不能识别为函数。唉···还是不行的

if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [字段1] varchar(100), [字段2] varchar(100));
insert #temp
select '80','i' union all
select '80','h' union all
select '80','j' union all
select '90','k' union all
select '90','h' union all
select '90','i' 
 
--好像只能临时表了
SELECT *, id=IDENTITY(INT,1,1) INTO #temp1 FROM #temp
SELECT 字段1,字段2,id=(SELECT COUNT(1)+1 FROM #temp1 b WHERE b.字段1 = a.字段1 AND b.id <= a.id) FROM #temp1 a
/*
字段1字段2id
80i2
80h3
80j4
90k2
90h3
90i4
*/

------解决方案--------------------


试试:
SELECT ROW,us_dp_id, * FROM
(      
select *, row_number()  OVER( PARTITION BY us_dp_id order by us_dp_id desc) as row from users 
 ) a 
[解决办法]

引用:
谢谢,可以用了,id就是倒序的4,3,2 4,3,2 了不太好。希望是2,3,4```2,3,4```要用很多次的。用order by 不行,大神能再改改不?

SELECT *, id=IDENTITY(INT,1,1) INTO #temp1 FROM #temp ORDER BY [字段1]--这儿加个ORDER BY,按你想要的顺序排序;如果无排序,那就得看SQL SERVER到底走哪个执行计划了
SELECT 字段1,字段2,id=(SELECT COUNT(1)+1 FROM #temp1 b WHERE b.字段1 = a.字段1 AND b.id <= a.id) FROM #temp1 a

热点排行