create table ta(序号 int,姓名 varchar(10),年龄 int) insert ta select 1 ,'高米', 24 insert ta select 2 ,'吴号', 32 insert ta select 3 ,'长江', 19godeclare @s varchar(8000),@s1 varchar(8000) set @s = '' set @s1 = '' select @s = @s + ',['+ 姓名+']=max(case when 姓名= '''+姓名+''' then 年龄 else null end)',@s1 = @s1 + ',['+ 姓名+']=max(case when 姓名= '''+姓名+''' then 序号 else null end)' from (select distinct 姓名 from ta) a set @s = 'select '+ stuff(@s,1,1,'') + ' from ta union select ' set @s1 = stuff(@s1,1,1,'') + ' from ta' exec(@s + @s1)drop table ta/*长江 高米 吴号 ----------- ----------- ----------- 3 1 2 19 24 32*/
create table ta(序号 int,姓名 varchar(10),年龄 int) insert ta select 1 ,'高米', 24 insert ta select 2 ,'吴号', 32 insert ta select 3 ,'长江', 19goselect * from (select 姓名,年龄 from ta) a pivot ( max(年龄) for 姓名 in ([高米],[吴号],[长江]) ) as ta今天刚学会的新技巧 据说2005才能用
create table ta(序号 int,姓名 varchar(10),年龄 int) insert ta select 1 ,'高米', 24 insert ta select 2 ,'吴号', 32 insert ta select 3 ,'长江', 19 goselect * from (select 姓名,序号 from ta) a pivot(max(序号) for 姓名 in ([高米],[吴号],[长江])) as ta union all select * from (select 姓名,年龄 from ta) a pivot(max(年龄) for 姓名 in ([高米],[吴号],[长江])) as tadrop table ta没看见那个序号 补充以下
drop table ta create table ta(id int,name varchar(10),age int) insert ta select 1 ,'高米', 24 insert ta select 2 ,'吴号', 32 insert ta select 3 ,'长江', 19go select max(高米) as '高米',max(吴号)as '吴号',max(长江)as '长江' from (select case when name='高米' then cast(age as varchar(4)) else '' end as '高米' , case when name='吴号' then cast(age as varchar(4)) else '' end as '吴号', case when name='长江' then cast(age as varchar(4)) else '' end as '长江' from ta) b union all select max(高米),max(吴号),max(长江) from (select case when name='高米' then cast(id as varchar(4)) else '' end as '高米' , case when name='吴号' then cast(id as varchar(4)) else '' end as '吴号', case when name='长江' then cast(id as varchar(4)) else '' end as '长江' from ta) b
create table ta(序号 int,姓名 varchar(10),年龄 int) insert ta select 1 ,'高米', 24 insert ta select 2 ,'吴号', 32 insert ta select 3 ,'长江', 19goselect max(case when 姓名='高米' then 序号 end) as 高米, max(case when 姓名='吴号' then 序号 end) as 吴号, max(case when 姓名='长江' then 序号 end) as 长江 from ta union all select max(case when 姓名='高米' then 年龄 end) as 高米, max(case when 姓名='吴号' then 年龄 end) as 吴号, max(case when 姓名='长江' then 年龄 end) as 长江 from ta/* 高米 吴号 长江 ----------- ----------- ----------- 1 2 3 24 32 19 警告: 聚合或其他 SET 操作消除了空值。(2 行受影响) */
pivot----SQL SERVER 2000 似乎不支持select max(case when 姓名='高米' then 序号 end) as 高米, max(case when 姓名='吴号' then 序号 end) as 吴号, max(case when 姓名='长江' then 序号 end) as 长江 from ta union all select max(case when 姓名='高米' then 年龄 end) as 高米, max(case when 姓名='吴号' then 年龄 end) as 吴号, max(case when 姓名='长江' then 年龄 end) as 长江 from ta -----这种方法太复杂了,如果记录还有很多,那肯定不行我想要的功能是将整个记录集倒过来显示,这个只是个举例。我记得以前有用过什么方法实现的,但是现在忘了。
create table ta(序号 int,姓名 varchar(10),年龄 int) insert ta select 1 ,'高米', 24 insert ta select 2 ,'吴号', 32 insert ta select 3 ,'长江', 19godeclare @sql1 varchar(4000),@sql2 varchar(4000) set @sql1='select 0' select @sql1=@sql1+',['+姓名+']=sum(case 姓名 when '''+姓名+''' then 序号 else '' '' end)' from (select 姓名 as 姓名 from ta )a set @sql1='select '+substring(@sql1,10,len(@sql1))+' from ta'set @sql2='select 0' select @sql2=@sql2+',['+姓名+']=sum(case 姓名 when '''+姓名+''' then 年龄 else '' '' end)' from (select 姓名 as 姓名 from ta )a set @sql2='select '+substring(@sql2,10,len(@sql2))+' from ta'exec(@sql1+' union all '+@sql2)
insert ta select 1 ,'高米', 24
insert ta select 2 ,'吴号', 32
insert ta select 3 ,'长江', 19godeclare @s varchar(8000),@s1 varchar(8000)
set @s = ''
set @s1 = ''
select @s = @s + ',['+ 姓名+']=max(case when 姓名= '''+姓名+''' then 年龄 else null end)',@s1 = @s1 + ',['+ 姓名+']=max(case when 姓名= '''+姓名+''' then 序号 else null end)'
from (select distinct 姓名 from ta) a
set @s = 'select '+ stuff(@s,1,1,'') + ' from ta union select '
set @s1 = stuff(@s1,1,1,'') + ' from ta'
exec(@s + @s1)drop table ta/*长江 高米 吴号
----------- ----------- -----------
3 1 2
19 24 32*/
create table ta(序号 int,姓名 varchar(10),年龄 int)
insert ta select 1 ,'高米', 24
insert ta select 2 ,'吴号', 32
insert ta select 3 ,'长江', 19goselect * from (select 姓名,年龄 from ta) a
pivot
(
max(年龄)
for 姓名 in
([高米],[吴号],[长江])
) as ta今天刚学会的新技巧
据说2005才能用
create table ta(序号 int,姓名 varchar(10),年龄 int)
insert ta select 1 ,'高米', 24
insert ta select 2 ,'吴号', 32
insert ta select 3 ,'长江', 19
goselect * from (select 姓名,序号 from ta) a
pivot(max(序号) for 姓名 in ([高米],[吴号],[长江])) as ta
union all
select * from (select 姓名,年龄 from ta) a
pivot(max(年龄) for 姓名 in ([高米],[吴号],[长江])) as tadrop table ta没看见那个序号 补充以下
create table ta(id int,name varchar(10),age int)
insert ta select 1 ,'高米', 24
insert ta select 2 ,'吴号', 32
insert ta select 3 ,'长江', 19go
select max(高米) as '高米',max(吴号)as '吴号',max(长江)as '长江' from (select case when name='高米' then cast(age as varchar(4)) else '' end as '高米' ,
case when name='吴号' then cast(age as varchar(4)) else '' end as '吴号',
case when name='长江' then cast(age as varchar(4)) else '' end as '长江' from ta) b
union all
select max(高米),max(吴号),max(长江) from (select case when name='高米' then cast(id as varchar(4)) else '' end as '高米' ,
case when name='吴号' then cast(id as varchar(4)) else '' end as '吴号',
case when name='长江' then cast(id as varchar(4)) else '' end as '长江' from ta) b
create table ta(序号 int,姓名 varchar(10),年龄 int)
insert ta select 1 ,'高米', 24
insert ta select 2 ,'吴号', 32
insert ta select 3 ,'长江', 19goselect max(case when 姓名='高米' then 序号 end) as 高米,
max(case when 姓名='吴号' then 序号 end) as 吴号,
max(case when 姓名='长江' then 序号 end) as 长江
from ta
union all
select max(case when 姓名='高米' then 年龄 end) as 高米,
max(case when 姓名='吴号' then 年龄 end) as 吴号,
max(case when 姓名='长江' then 年龄 end) as 长江
from ta/*
高米 吴号 长江
----------- ----------- -----------
1 2 3
24 32 19
警告: 聚合或其他 SET 操作消除了空值。(2 行受影响)
*/
max(case when 姓名='吴号' then 序号 end) as 吴号,
max(case when 姓名='长江' then 序号 end) as 长江
from ta
union all
select max(case when 姓名='高米' then 年龄 end) as 高米,
max(case when 姓名='吴号' then 年龄 end) as 吴号,
max(case when 姓名='长江' then 年龄 end) as 长江
from ta
-----这种方法太复杂了,如果记录还有很多,那肯定不行我想要的功能是将整个记录集倒过来显示,这个只是个举例。我记得以前有用过什么方法实现的,但是现在忘了。
insert ta select 1 ,'高米', 24
insert ta select 2 ,'吴号', 32
insert ta select 3 ,'长江', 19godeclare @sql1 varchar(4000),@sql2 varchar(4000)
set @sql1='select 0'
select @sql1=@sql1+',['+姓名+']=sum(case 姓名 when '''+姓名+''' then 序号 else '' '' end)' from (select 姓名 as 姓名 from ta )a
set @sql1='select '+substring(@sql1,10,len(@sql1))+' from ta'set @sql2='select 0'
select @sql2=@sql2+',['+姓名+']=sum(case 姓名 when '''+姓名+''' then 年龄 else '' '' end)' from (select 姓名 as 姓名 from ta )a
set @sql2='select '+substring(@sql2,10,len(@sql2))+' from ta'exec(@sql1+' union all '+@sql2)