首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求一较难的SQL语句,该如何解决

2012-02-03 
求一较难的SQL语句场景:Tab1里是一个班的成绩,成绩最高3分,最低1分,都是整数表结构如下Tab1学号语文数学英

求一较难的SQL语句
场景:Tab1里是一个班的成绩,成绩最高3分,最低1分,都是整数

表结构如下

Tab1
学号 语文 数学 英语
001 2 1 2
002 1 2 2
003 2 1 1

Tab2
分数段
 3
 2
 1

想得到的查询结果

科目 分数段 科目数(有多少科在这个分数段里)
语文 3 0
语文 2 2
语文 1 1
数学 3 0
数学 2 1
数学 1 2
英语 3 0
英语 2 2
英语 1 1

[解决办法]
看结果,应该是人数吧?

SQL code
SELECT    A.科目, B.分数段, 人数 = COUNT(A.学号)FROM(SELECT 学号, 科目 = N'语文', 分数 = 语文 FROM Tab1 UNION ALLSELECT 学号, 科目 = N'数学', 分数 = 数学 FROM Tab1 UNION ALLSELECT 学号, 科目 = N'英语', 分数 = 英语 FROM Tab1 )A    RIGHT JOIN Tab2 B        ON A.分数段 = B.分数段GROUP BY A.科目, B.分数段
[解决办法]
create table Tab1 (学号 nvarchar(10), 语文 int , 数学 int , 英语 int )
insert into tab1 select '001' ,2 ,1, 2 
union select '002' ,1 ,2, 2 
union select '003' ,2 ,1, 1 

create table Tab2 (分数段 int )
insert into tab2 select 3 
union select 2 
union select 1


select a.name as 科目,tab2.分数段,Count(学号) as 科目数
from 
(
select name from syscolumns where object_id('tab1')=ID and name<>N'学号')a 
cross join tab2 left outer join (
select 学号, 语文 as Score,N'语文' as Class from tab1
union 
select 学号, 数学,N'数学' from tab1
union
select 学号, 英语,N'英语' from tab1)b
on a.name=b.class and tab2.分数段=b.Score
group by a.name,tab2.分数段
order by a.name,tab2.分数段 desc

  
--result
数学
30数学
21数学
12英语
30英语
22英语
11语文
30语文
22语文
11
[解决办法]
SQL code
--原始数据:@T1declare @T1 table(学号 varchar(3),语文 int,数学 int,英语 int)insert @T1select '001',2,1,2 union allselect '002',1,2,2 union allselect '003',2,1,1--原始数据:@T2declare @T2 table(分数段 int)insert @T2select 3 union allselect 2 union allselect 1select b.科目,a.分数段, 科数目=sum(case when c.分数段 is null then 0 else 1 end) from @T2 across join(select 科目='语文' union allselect 科目='数学' union allselect 科目='英语') bleft join(select 科目='语文',分数段=语文 from @T1 union allselect 科目='数学',分数段=数学 from @T1 union allselect 科目='英语',分数段=英语 from @T1) con a.分数段=c.分数段 and b.科目=c.科目group by b.科目,a.分数段order by b.科目,a.分数段 desc/*科目    分数段    科目数数学    3    0数学    2    1数学    1    2英语    3    0英语    2    2英语    1    1语文    3    0语文    2    2语文    1    1*/ 

热点排行