关于交叉表问题

DST_good 2003-09-13 10:23:14
grade表结构如下:
num char(15)
name varchar(10)
course varchar(20)
score decimal(18,2)
记录如下
num course score
N03003011103001 高等数学 70
N03003011103001 大学英语 70
N03003011103001 计算机基础 70
. . .
. . .
. . .
. . .
我现在不知道每个学生的课程有多少门但又需要把记录变成这样这样的形式
num 高等数学 大学英语 计算机基础 ..............
N03003011103001 70 70 70 ..............
在查询分析器用下面的语句可以实现:
declare @sql varchar(8000)
set @sql = 'select num,'
select @sql = @sql + 'sum(case course when '''+course+'''then score else 0 end) as '''+course+''','from (select distinct course from grade) as a
select @sql = left(@sql,len(@sql)-1) + ' from grade group by num'
exec(@sql)
但是我现在想把它建成一个视图或表而不是存储过程应该怎么写


...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2003-09-15
  • 打赏
  • 举报
回复
如果是动态的,哪你只可一通过stored procedure来实现。如果是静态的可以通过VIEW。
wate 2003-09-15
  • 打赏
  • 举报
回复
在存储过程中加exec(@sql)
DST_good 2003-09-14
  • 打赏
  • 举报
回复
CREATE PROCEDURE dbo.subject AS
declare @sql varchar(8000)
set @sql = 'select num,'
select @sql = @sql + 'sum(case course when '''+course+'''then score else 0 end) as '''+course+''','from (select distinct course from grade) as a
select @sql = left(@sql,len(@sql)-1) + ' from grade group by num'
return
GO

我现在用了写了这个存储过程 在查询分析器中exec subject时只显示命令成功没有结果显示,但是用
declare @sql varchar(8000)
set @sql = 'select num,'
select @sql = @sql + 'sum(case course when '''+course+'''then score else 0 end) as '''+course+''','from (select distinct course from grade) as a
select @sql = left(@sql,len(@sql)-1) + ' from grade group by num'
exec(@sql)
的时候就有结果显示
这是什么原因啊
zjcxc 2003-09-13
  • 打赏
  • 举报
回复
如果你表中的course数据种类不固定,就一定要用存储过程或上面的语句段,否则可以直接写

select num,
高等数学=sum(case course when '高等数学' then score end),
大学英语=sum(case course when '大学英语' then score end),
计算机基础=sum(case course when '计算机基础' then score end),
...其他项...
from grade group by num
yzr220 2003-09-13
  • 打赏
  • 举报
回复
我想不行吧,这个交叉表是动态生成的,不能用定死的方法吧!

yonghengdizhen 2003-09-13
  • 打赏
  • 举报
回复
不用存储过程是没办法实现你的要求的.
yzr220 2003-09-13
  • 打赏
  • 举报
回复
我想要做成交叉表的形式,一般情况下“表中的course数据种类是不固定”,比如楼主的本例,“在学校中,课程都是在变动的,不可能学校教20门课,就一直定下来了,以后也不会增加或减少了”,关键还是“楼主希望能不用存储过程实现交叉的目的”。

只能UP,不能替楼主解决,深以为憾!

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧