我有一个表是
Name Sex 类别 类别值
张三 男 身份证号 328368679089817
张三 男 毕业证号 B00886
张三 男 毕业学校 人民大学
张三 男 所在单位 工业公司
.
.
.
想把这个表变成
Name Sex 身份证号 毕业证号 毕业学校 所在单位 .....
张三 男 328368679089817 B00886 人民大学 工业公司
不知道如何弄,请高手指点,多谢了
Name Sex 类别 类别值
张三 男 身份证号 328368679089817
张三 男 毕业证号 B00886
张三 男 毕业学校 人民大学
张三 男 所在单位 工业公司
.
.
.
想把这个表变成
Name Sex 身份证号 毕业证号 毕业学校 所在单位 .....
张三 男 328368679089817 B00886 人民大学 工业公司
不知道如何弄,请高手指点,多谢了
给你个例子 你看一下
create table t(name varchar(03),subject varchar(10), int)
insert into t
select 'A','語文',80 union all
select 'A','數學',80 union all
select 'A','外語',80 union all
select 'B','數學',80 union all
select 'B','外語',80 union all
select 'C','語文',78--在使用动态变量的时候 不能使用动态的表
--答案一
declare @sql varchar(8000),@count int
select @count=count(distinct subject) from T
set @sql='select name'
select @sql=@sql+',sum(case when subject='''+subject+''' then else 0 end) as '+subject
from T
group by subjectselect @sql=@sql+',sum(isnull(,0))/'+rtrim(@count)+' as [avg] from t group by name'
exec(@sql)
/*
name 外語 語文 數學 avg
---- ----------- ----------- ----------- -----------
A 80 80 80 80
B 80 0 80 53
C 0 78 0 26
*/
drop table t
--答案二
create table tb(name varchar(10),subject varchar(10), int)insert into tb values('A', '语文', 80)
insert into tb values('A', '数学', 80)
insert into tb values('A', '外语', 80 )
insert into tb values('B', '数学', 80)
insert into tb values('B', '外语', 80)
insert into tb values('C', '语文', 78)select name ,
max(case subject when '语文' then else 0 end) '语文',
max(case subject when '数学' then else 0 end) '数学',
max(case subject when '外语' then else 0 end) '外语',
sum()/(select max(cnt) cnt from (select name , count(*) cnt from tb group by name) t) [avg]
from tb
group by namedeclare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' ,sum()/(select max(cnt) cnt from (select name , count(*) cnt from tb group by name) t) [avg] from tb group by name'
exec(@sql) drop table tb
set @sql='select name,sex'
select @sql=@sql+',['+类别
+']=(case 类别 when '''+类别+''' then 类别值 else '' end)'
from(select distinct 类别 from tb) a
exec(@sql+' from tb group by name,sex')
insert tab
select '张三','男','身份证号','328368679089817' union all
select '张三','男','毕业证号','B00886' union all
select '张三','男','毕业学校','人民大学' union all
select '张三','男','所在单位','工业公司'
declare @sql varchar(8000)
set @sql= 'select name,max(sex) as sex '
select @sql=@sql+ ',[ '+类别
+ ']=max(case 类别 when '''+类别+ ''' then 类别值 else '''' end) '
from (select distinct 类别 from tab) a
exec(@sql+ ' from tab group by name ')
drop table tab
---------- ---- ------------------------------ ------------------------------ ------------------------------ ------------------------------
张三 男 人民大学 B00886 328368679089817 工业公司(1 行受影响)
Set @sql=''
Select @sql=@sql+',Max(Case When 类别='''+类别+''' Then 类别值 Else '''' End) As ['+类别+']'
From T Group By 类别
Exec('Select Name,Sex'+@sql+'From T Group By Name,Sex')
1.首先要提出要显示的内容:也就是将 毕业学校 毕业证号 身份证号 所在单位 这些列用语句的方式显示出来,语句为:
select @sql=@sql+ ',[ '+类别
+ ']=max(case 类别 when '''+类别+ ''' then 类别值 else '''' end) '
from (select distinct 类别 from tab) a 2.与上面的语句结合生成结果:
set @sql= 'select name,max(sex) as sex '
select @sql=@sql+ ',[ '+类别
+ ']=max(case 类别 when '''+类别+ ''' then 类别值 else '''' end) '
from (select distinct 类别 from tab) a
exec(@sql+ ' from tab group by name ')