日期:2014-05-19  浏览次数:20578 次

为符合客户的打印要求,求SQL语句
表如下
id   name   序号   姓名
1     张三
2     张三
3     张三  
4     张三
5     李四
6     李四
7     李四
8     王二

通过SQL转化为:

id   name   序号   姓名
1     张三     1       张三
2     张三
3     张三  
4     张三
5     李四     2       李四
6     李四
7     李四
8     王二     3       王二


------解决方案--------------------
create table T(id int, name varchar(10),序号 varchar(10),姓名 varchar(10))
insert T select 1, '张三 ', ' ', ' '
insert T select 2, '张三 ', ' ', ' '
insert T select 3, '张三 ', ' ', ' '
insert T select 4, '张三 ', ' ', ' '
insert T select 5, '李四 ', ' ', ' '
insert T select 6, '李四 ', ' ', ' '
insert T select 7, '李四 ', ' ', ' '
insert T select 8, '王二 ', ' ', ' '

update T
set
序号=(select count(distinct name)+1 from T where id <a.id and name!=a.name),
姓名=name
from T a
where
not exists(select 1 from T where name=a.name and id <a.id)

select * from T
drop table T
--结果
id name 序号 姓名
----------- ---------- ---------- ----------
1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 2 李四
6 李四
7 李四
8 王二 3 王二

(所影响的行数为 8 行)

------解决方案--------------------
declare @T table (id int, name varchar(10),序号 varchar(10),姓名 varchar(10))
insert @T select 1, '张三 ', ' ', ' '
insert @T select 2, '张三 ', ' ', ' '
insert @T select 3, '张三 ', ' ', ' '
insert @T select 4, '张三 ', ' ', ' '
insert @T select 5, '李四 ', ' ', ' '
insert @T select 6, '李四 ', ' ', ' '
insert @T select 7, '李四 ', ' ', ' '
insert @T select 8, '王二 ', ' ', ' '

update @T
set 序号=b.id,
姓名=b.name
from @T a,
(select * from @T where id in(select min(id) from @T group by name)) b
where a.id=b.id
select * from @t

----result

1 张三 1 张三
2 张三
3 张三
4 张三
5 李四 5 李四
6 李四
7 李四
8 王二 8 王二



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

create table ttt(id int, name nvarchar(10))
insert ttt
select 1, N '张三 '
union select 2 ,N '张三 '
union select 3 ,N '张三 '
union select 4 ,N '张三 '
union select 5 ,N '李四 '
union select 6 ,N '李四 '
union select 7 ,N '李四 '
union select 8 ,N '王二 '

select [id],[name],[id]=case when (select count(1) from ttt where id <a.id and name=a.name)=0 then [id] else null end,[name]=case when (select count(1) from ttt where id <a.id and name=a.name)=0 then [name] else ' ' end from ttt a