select 课程名,
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分',
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分',
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分',
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分'
from 表
where 课程名='语文'
group by 课程名
分数自己添
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分',
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分',
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分',
sum(case when 分数 between 0 and 60 then 分数 else 0 end) as '0-60分'
from 表
where 课程名='语文'
group by 课程名
分数自己添
解决方案 »
- 求SQL2000解决数据库质疑可靠方法
- 请问如下C#和SQL2008连接代码的意思是?
- 数据库文件坏掉了,就省下一个日志文件,如何恢复呢..up有分
- JOB出现SqlState 01000的错误,不是天天有,
- 避免相关子查询 ??
- 【导入部分数据表的数据的问题】,谢谢!!!
- 求助~ACCESS2000数据库怎样迁移到SQL2000数据库!
- Execl 导入 Mssql 问题? 关于单元格格式 高手进 用的是Ado 导入
- 这样的查询怎么写?上次别人回的结了贴才发现不行的。没分了,请原谅
- sqlserver7 的安全模式问题
- 如何获取SQL2005的数据库表ER关系图?
- SQL Server 2005 日志删除和日志文件限制
division CHAR(20),
number INT);CREATE PROC statistic_(name CHAR(20))
AS
DECLARE
less60 int := 0; //分为五个分数段,并置初始值为0
b60a70 int := 0;
b70a80 int := 0;
b80a90 int := 0;
more90 int := 0;
curcno CHAR(4); --设字符型变量curcno 存放输入的课程名称参数
BEGIN
SELECT 课程号 INTO curcno --根据课程名称在Course 表中查询查询该课程号
FROM 课程表
WHERE 课程名 = name;
IF NOT FOUND THEN --如果不存在用户输入的课程名称,返回错误信息
RAISE EXCEPTION '输入错误,没有该课程';
END IF;
SELECT count(*) INTO less60 --查询分数低于60 分的学生人数
FROM 成绩表
WHERE 课程号 = curcno AND 成绩< 60;
SELECT count(*) INTO b60a70 --查询分数在60 到70 之间的学生人数
FROM 成绩表
WHERE 课程号 = curcno AND 成绩 >= 60 AND 成绩< 70;
SELECT count(*) INTO b70a80 --查询分数在70 到80 之间的学生人数
FROM 成绩表
WHERE 课程号 = curcno AND 成绩 >= 70 AND 成绩 < 80;
SELECT count(*) INTO b80a90 --查询分数在80 到90 之间的学生人数
FROM 成绩表
WHERE 课程号 = curcno AND 成绩 >= 80 AND 成绩 < 90;
SELECT count(*) INTO more90 --查询分数高于90 的学生人数
FROM 成绩表
WHERE 课程号 = curcno AND 成绩 >= 90;
--向表Rank 中插入五条记录,显示成绩分布情况
INSERT INTO Rank VALUES('[0,60)',less60);
INSERT INTO Rank VALUES('[60,70)',b60a70);
INSERT INTO Rank VALUES('[70,80)',b70a80);
INSERT INTO Rank VALUES('[80,90)',b80a90);
INSERT INTO Rank VALUES('[90,100]',more90);
END消息 102,级别 15,状态 1,过程 statistic_,第 1 行
'name' 附近有语法错误。
消息 155,级别 15,状态 2,过程 statistic_,第 4 行
'int' 不是可以识别的 CURSOR 选项。
消息 4145,级别 15,状态 1,过程 statistic_,第 14 行
在应使用条件的上下文(在 'THEN' 附近)中指定了非布尔类型的表达式。
消息 128,级别 15,状态 1,过程 statistic_,第 33 行
在此上下文中不允许使用名称 "less60"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
消息 128,级别 15,状态 1,过程 statistic_,第 34 行
在此上下文中不允许使用名称 "b60a70"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
消息 128,级别 15,状态 1,过程 statistic_,第 35 行
在此上下文中不允许使用名称 "b70a80"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
消息 128,级别 15,状态 1,过程 statistic_,第 36 行
在此上下文中不允许使用名称 "b80a90"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。
消息 128,级别 15,状态 1,过程 statistic_,第 37 行
在此上下文中不允许使用名称 "more90"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。出现上面的错误,怎么解决啊
CREATE TABLE 表 (课程名 varchar(20),分数 int)
insert 表
select '语文',80 union all
select '语文',90 union all
select '语文',50 union all
select '语文',65 union all
select '数学',80 union all
select '数学',95 union all
select '数学',100 union all
select '数学',90 ---定义存储过程---
if object_id('dbo.ScoreProc') is not null
drop proc dbo.ScoreProc
GO
Create proc dbo.ScoreProc @course varchar(50)
as
begin
select
课程名,
sum(case when 分数 between 0 and 59 then 1 else 0 end) as '60分以下',
sum(case when 分数 between 60 and 74 then 1 else 0 end) as '60-74分',
sum(case when 分数 between 75 and 84 then 1 else 0 end) as '75-84分',
sum(case when 分数 between 85 and 100 then 1 else 0 end) as '85-100分'
from 表
where 课程名=@course
group by 课程名
end---调用存储过程---
exec ScoreProc '语文'
exec ScoreProc '数学'---结果---
/**
课程名 60分以下 60-74分 75-84分 85-100分
-------------------- ----------- ----------- ----------- -----------
语文 1 1 1 1课程名 60分以下 60-74分 75-84分 85-100分
-------------------- ----------- ----------- ----------- -----------
数学 0 0 1 3
**/
select 课程名称 , 分数 , count(*) from tb group by 课程名称select 课程名称 ,
sum(case when 分数 between 0 and 59 then 1 else 0 end) as [0-60],
sum(case when 分数 between 60 and 69 then 1 else 0 end) as [60-70],
sum(case when 分数 between 70 and 79 then 1 else 0 end) as [70-80],
sum(case when 分数 between 80 and 89 then 1 else 0 end) as [80-89],
sum(case when 分数 between 90 and 100 then 1 else 0 end) as [90-100]
from tb
group by 课程名称
drop proc dbo.ScoreProc
GO
什么作用啊