我表中的数据是这样的
李 21
李 33
李 23
李 27
张 11
张 45
张 67
张 65
我想转换成这样的李 张
21 11
33 45
23 67
27 65
这只是个例 子数据基本是每天都在动的。请教了
李 21
李 33
李 23
李 27
张 11
张 45
张 67
张 65
我想转换成这样的李 张
21 11
33 45
23 67
27 65
这只是个例 子数据基本是每天都在动的。请教了
解决方案 »
- 新手问题,使用">"
- GUID、varchar2个类型,在那种类型上建立索引查询效率更高?
- 在线等:求一条SQL语句,查找最近录入某表的10条记录
- 在线急等关于sql server的数据文件为dat格式的问题
- 请问可否实现这样的数据表在英文的SQL SERVER中?
- sql2005还原数据库,成功后,有3个视图表结构发生了变化
- 急!数据库恢复问题!
- 高难度动作——用最简单的语句将一条记录复制到另一个结构相同的表。高手请进!
- 在SQL Server 2000中的数据语言中使用变量来修改表
- 令俺头痛的问题,救命。一定给分!
- 怎样取函数值的小数点后2位,例如20/6=3.3333333现在要取小数部分的前2位,就是20/6=3.33,而不是20/6=3.00
- SQL数据库的问题
(select c2 '李' , px = row_number() over(order by c2) from tb where c1 = '李') m
full join
(select c2 '张' , px = row_number() over(order by c2) from tb where c1 = '张') n
on m.px = n.px
insert into tb values(N'李', 21 )
insert into tb values(N'李', 33 )
insert into tb values(N'李', 23 )
insert into tb values(N'李', 27 )
insert into tb values(N'张', 11 )
insert into tb values(N'张', 45 )
insert into tb values(N'张', 67 )
insert into tb values(N'张', 65 )
goselect m.[李] , n.[张] from
(select c2 '李' , px = row_number() over(order by c2) from tb where c1 = N'李') m
full join
(select c2 '张' , px = row_number() over(order by c2) from tb where c1 = N'张') n
on m.px = n.px
order by m.pxdrop table tb /*
李 张
----------- -----------
21 11
23 45
27 65
33 67(4 行受影响)
*/
insert into # values(N'李', 33 )
insert into # values(N'李', 23 )
insert into # values(N'李', 27 )
insert into # values(N'张', 11 )
insert into # values(N'张', 45 )
insert into # values(N'张', 67 )
insert into # values(N'张', 65 )GO
;with cc as
(select *,id=(select count(1)+1 from # a where a.c1=#.c1 and a.c2<#.c2) from #)select top 1 c1 name1,name2=(select top 1 c1 from cc a where a.c1<>cc.c1 order by a.c1 asc) from cc
union all
select top 4 ltrim(c2),hh=(select top 1 ltrim(c2) from cc a where a.id=cc.id and a.c1<>cc.c1 order by a.id asc) from cc
--这里4表示有四个数据,应该取最大
------------ ------------
李 张
21 11
33 67
23 45
27 65(5 行受影响)
;with cc as
(select *,id=(select count(1)+1 from # a where a.c1=#.c1 and a.c2<#.c2) from # )select name1,name2 from
(
select top 1 c1 name1,name2=(select top 1 c1 from cc a where a.c1<>cc.c1 order by a.c1 asc),level=0 from cc
union all
select top 4 ltrim(c2),hh=(select top 1 ltrim(c2) from cc a where a.id=cc.id and a.c1<>cc.c1 order by a.id asc),level=cc.id from cc
order by level asc
) t
GO
name1 name2
------------ ------------
李 张
21 11
11 21
45 23
23 45(5 行受影响)
insert into tb values(N'李', 21 )
insert into tb values(N'李', 33 )
insert into tb values(N'李', 23 )
insert into tb values(N'李', 27 )
insert into tb values(N'张', 11 )
insert into tb values(N'张', 45 )
insert into tb values(N'张', 67 )
insert into tb values(N'张', 65 )godeclare @sql nvarchar(4000)
set @sql = ''
select @sql = @sql + ',max(case c1 when N''' + c1 + ''' then c2 else 0 end) [' + c1 + ']'
from (select distinct c1 from tb m) as a
set @sql = 'select ' + substring(@sql,2,len(@sql)) + ' from (select t.* ,px =row_number() over(partition by c1 order by c2) from tb t) m group by px'
exec(@sql) drop table tb/*
张 李
----------- -----------
11 21
45 23
65 27
67 33(4 行受影响)
*/create table tb(c1 nvarchar(10),c2 int)
insert into tb values(N'李', 21 )
insert into tb values(N'李', 33 )
insert into tb values(N'李', 23 )
insert into tb values(N'李', 27 )
insert into tb values(N'张', 11 )
insert into tb values(N'张', 45 )
insert into tb values(N'张', 67 )
insert into tb values(N'张', 65 )
insert into tb values(N'王', 11 )
insert into tb values(N'王', 45 )
insert into tb values(N'王', 67 )
insert into tb values(N'王', 65 )godeclare @sql nvarchar(4000)
set @sql = ''
select @sql = @sql + ',max(case c1 when N''' + c1 + ''' then c2 else 0 end) [' + c1 + ']'
from (select distinct c1 from tb m) as a
set @sql = 'select ' + substring(@sql,2,len(@sql)) + ' from (select t.* ,px =row_number() over(partition by c1 order by c2) from tb t) m group by px'
exec(@sql) drop table tb/*
张 李 王
----------- ----------- -----------
11 21 11
45 23 45
65 27 65
67 33 67(4 行受影响)
*/
误会了!
我以后你的姓名还要一行,是这样效果
name1 name2
------------ ------------
李 张
21 11
33 67
23 45
27 65(5 行受影响)
其实你只须把姓名当成列名。
而你要这种 效果!
张 李
----------- -----------
11 21
45 23
65 27
67 33