create table sales(
sid int identity primary key,
pamount numeric(10,2),
sdate date
);
insert into sales values(4000,\'2012-5-14\');
insert into sales values(8000,\'2012-3-14\');
insert into sales values(4200,\'2012-3-26\');
insert into sales values(4200,\'2012-3-26\');
insert into sales values(20000,\'2012-4-14\');
insert into sales values(4200,\'2012-5-12\');
insert into sales values(8400,\'2012-6-14\');
insert into sales values(4000,\'2012-2-18\');
insert into sales values(12000,\'2012-3-14\');
insert into sales values(4200,\'2012-3-12\');
insert into sales values(4200,\'2012-4-12\');
insert into sales values(8600,\'2012-3-12\');
insert into sales values(11000,\'2012-5-12\');
insert into sales values(12000,\'2012-4-14\');
insert into sales values(4800,\'2012-4-18\');
--日报表
select sdate,SUM(pamount) as \'总额\' from tbSales group by sdate;
--周报表
select YEAR(sdate) as \'年份\',DATEPART(week,sdate) as \'周次\',SUM(pamount) as \'总额\' from tbSales group by YEAR(sdate),DATENAME(week,sdate);
--月报表
select YEAR(sdate) as \'年份\',MONTH(sdate) as \'月份\',SUM(pamount) as \'总额\' from tbSales group by YEAR(sdate),MONTH(sdate);
--季度报表
select y as \'年份\',SUM(case when m between 1 and 3 then total else 0 end) as \'一季度\',
SUM(case when m between 4 and 6 then total else 0 end) as \'二季度\',
SUM(case when m between 7 and 9 then total else 0 end) as \'三季度\',
SUM(case when m between 10 and 12 then total else 0 end) as \'四季度\' from(
select YEAR(sdate) as y,MONTH(sdate) as m,SUM(pamount) as total from tbSales group by YEAR(sdate),MONTH(sdate)
) oo group by y;
--年报表
select YEAR(sdate) as \'年分\',SUM(pamount) as \'总额\' from tbSales group by YEAR(sdate);
use master;
go
if exists(select * from sysdatabases where name=\'test\')
drop database test;
go
create database test;
go
use test;
if exists(select * from sys.objects where name=\'stuinfo\')
drop table stuifo;
go
create table stuinfo(--学生
stuid int primary key identity(1,1),
sname nvarchar(50) unique,
sage int not null
constraint CK_age check(sage>=18 and sage<=30),
saddress nvarchar(50),
sex varchar(2) default \'男\'
);
go
if exists(select * from sys.objects where name=\'course\')
drop table course;
go
create table course(--科目
cid int primary key identity(1,1),
cname nvarchar(50)
);
go
if exists(select * from sys.objects where name=\'score\')
drop table score;
go
create table score(--成绩
scoreid int primary key identity(1,1),
studentid int constraint FK_studentid
foreign key references stuinfo(stuid),
courseid int constraint FK_courseid
foreign key references course(cid),
score int
);
go
insert into course values(\'j2se精讲\');
insert into course values(\'sql server\');
insert into course values(\'html网页设计\');
insert into course values(\'软件测试基础\');
insert into stuinfo values(\'张果老\',22,null,\'男\');
insert into stuinfo values(\'李豹\',22,null,\'男\');
insert into stuinfo values(\'老胡\',22,\'北京\',\'男\');
insert into stuinfo values(\'老江\',24,\'湖南\',\'男\');
insert into stuinfo values(\'张无忌\',26,\'衡阳\',\'男\');
insert into stuinfo values(\'二师兄\',28,\'长沙\',\'男\');
insert into stuinfo values(\'凤姐\',24,\'上海\',\'女\');
insert into stuinfo values(\'元芳\',28,\'上海\',\'男\');
insert into stuinfo values(\'离歌\',23,\'上海\',\'男\');
insert into stuinfo values(\'八戒\',24,\'上海\',\'男\');
insert into score values(5,1,95);
insert into score values(5,2,58);
insert into score values(5,3,56);
insert into score values(5,4,81);
insert into score values(5,2,80);
insert into score values(1,1,78);
insert into score values(1,3,81);
insert into score values(1,4,92);
insert into score values(2,3,30);
insert into score values(2,3,78);
insert into score values(3,3,66);
insert into score values(4,3,66);
insert into score values(6,3,78);
insert into score values(7,3,76);
insert into score values(8,2,81);
insert into score values(9,2,90);
insert into score values(10,3,42);
insert into score values(2,1,80);
insert into score values(4,2,78);
insert into score values(8,3,69);
insert into score values(8,1,69);
--按成绩分科分段统计
select * from score
select cname,sum(case when score between 85 and 100 then 1 else 0 end) as [100 - 85],
sum(case when score between 70 and 85 then 1 else 0 end) as [85 - 70],
sum(case when score between 60 and 70 then 1 else 0 end) as [70 - 60],
sum(case when score < 60 then 1 else 0 end) as [60 -0] from score,course where courseid=cid group by cname; --没有考虑补考的
--去掉补考的
select cname,sum(case when score between 85 and 100 then 1 else 0 end) as [100 - 85],
sum(case when score between 70 and 85 then 1 else 0 end) as [85 - 70],
sum(case when score between 60 and 70 then 1 else 0 end) as [70 - 60],
sum(case when score < 60 then 1 else 0 end) as [60 -0] from (
select studentid,courseid,cid,cname,max(score) as score from
score,course where courseid=cid group by studentid,courseid,cid,cname) oo where courseid=cid group by cname;