看了你们些关于行列转换的帖子,大概懂了一点
就是假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82 的例子 用exec(@sql)来实现的
但是现在我要求用查询出来的结果和另外一张表b内联显示出来,请问怎么做?
也就是
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
和号码 姓名
1 张三
2 李四
内联起来得出
姓名 语文 数学 物理 号码
张三 80 90 85 1
李四 85 92 82 2
就是假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82 的例子 用exec(@sql)来实现的
但是现在我要求用查询出来的结果和另外一张表b内联显示出来,请问怎么做?
也就是
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
和号码 姓名
1 张三
2 李四
内联起来得出
姓名 语文 数学 物理 号码
张三 80 90 85 1
李四 85 92 82 2
wzy_love_sly
set @sql='select name[姓名]'
select @sql=@sql+','+subject+'=max(case subject when '''+subject+''' then result else 0 end)'
from (select distinct subject from cj)a
exec(@sql+',号码 from cj,b where a.name=b.姓名 group by name,号码')
drop table tbb
go
create table tba(姓名 varchar(10),语文 int,数学 int,物理 int)
insert into tba select '张三',80,90,85
insert into tba select '李四',85,92,82
go
create table tbb(号码 int,姓名 varchar(10))
insert into tbb select 1,'张三'
insert into tbb select 2,'李四'
go
select a.*,b.号码 from tba a inner join tbb b
on a.姓名=b.姓名张三 80 90 85 1
李四 85 92 82 2
结果显示
服务器: 消息 107,级别 16,状态 3,行 1
列前缀 'a' 与查询中所用的表名或别名不匹配。
服务器: 消息 107,级别 16,状态 1,行 1
列前缀 'a' 与查询中所用的表名或别名不匹配。
服务器: 消息 107,级别 16,状态 1,行 1
列前缀 'a' 与查询中所用的表名或别名不匹配。
declare @sql varchar(8000)
set @sql='select a.haoma,b.name'
select @sql=@sql+',sum(case subject when '''+ subject +''' then result else 0 end ) as ' + subject
from (select distinct subject from cj) a
set @sql = @sql + ' from cj b inner join haomabiao a on a.xingming=b.name group by a.haoma,b.name'
exec(@sql)
declare @sql varchar(8000)
set @sql='select name[姓名]'
select @sql=@sql+','+subject+'=max(case subject when '''+subject+''' then result else 0 end)'
from (select distinct subject from cj)a
exec(@sql+',号码 from cj a,b where a.name=b.姓名 group by name,号码')--看错了。表别名掉了一个
我是需要从那个转换开始的呢,也就是说怎么把转换后的结果放到你的那个
tba表中间去,
不能按你显示的那样,固定把那些成绩插进去呢,假如成绩变了呢,我需要根据查询出来的结果去内联
sid Name
1 li
2 zhang
3 wang 课程表 course
cid Name
1 数学
2 英语
3 计算机 成绩表 pid sid Grade
1 1 90
3 2 78
1 3 60
2 2 76
2 1 80
3 1 59
3 3 83
2 3 46
1 2 90
想生成一个表
学生 数学 英语 计算机
li 90 90 60
zhang 80 76 46
wang 59 78 83
--静态
select 学生= a.name,
数学 = sum(case when c.name = '数学' then b.grade else 0 end),
英语 = sum(case when c.name = '英语' then b.grade else 0 end),
计算机 = sum(case when c.name = '计算机' then b.grade else 0 end)from student a,成绩表 b, course c
where a.sid = c.sid and b.cid = c.pid
group by a.name
--动态
declare @sql varchar(8000)
set @sql='select a.name as 学生'
select @sql=',max(case when b.name='''+name+''' then c.grade end) as ['+name+']'
from 成绩表 group by nameexec (@sql+' from student a,成绩表 b,course c where a.sid=c.sid and b.cid=c.pid group by a.name')
1 张三
2 李四
这个表吧?
恩,我就是那意思
set @sql='select a.name as 学生'
select @sql=',max(case when b.name='''+name+''' then c.grade end) as ['+name+']'
from 成绩表 group by nameexec ('select * from 号码表 tp1 inner join ('+@sql+' from student a,成绩表 b,course c where a.sid=c.sid and b.cid=c.pid group by a.name)tp2 on tp1.姓名=tp2.姓名')这样的