|
本帖最后由 wuxiang_123 于 2013-5-2 16:20 编辑
mps777 发表于 2013-5-2 09:16
SQL里好像没有这2个函数的。
是添加辅助列吗?
- select 姓名,科目,成绩 from
- (select 姓名,'语文' as 科目,语文 as 成绩,语文*100000 as 成绩2 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 语文 desc) union all
- select 姓名,'数学',数学,数学*10000 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 数学 desc) union all
- select 姓名,'英语',英语,英语*1000 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 英语 desc) union all
- select 姓名,'物理',物理,物理*100 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 物理 desc) union all
- select 姓名,'化学',化学,化学*10 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 化学 desc) union all
- select 姓名,'生物',生物,生物 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 生物 desc) union all
- select 姓名,'总分',总分,总分*10^6 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 总分 desc)) order by 成绩2 desc
复制代码
可改为:
- select 姓名,科目,成绩 from
- (select 姓名,'语文' as 科目,语文 as 成绩 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 语文 desc) union all
- select 姓名,'数学',数学,数学 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 数学 desc) union all
- select 姓名,'英语',英语,英语 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 英语 desc) union all
- select 姓名,'物理',物理,物理 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 物理 desc) union all
- select 姓名,'化学',化学,化学 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 化学 desc) union all
- select 姓名,'生物',生物,生物 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 生物 desc) union all
- select 姓名,'总分',总分,总分 from [成绩表$] where 学号 in (select top 3 学号 from [成绩表$] order by 总分 desc))
- order by INSTR('总分语文数学英语物理化学生物',科目),成绩 DESC
复制代码 INSTR:从指定搜索位置开始,返回需要搜索的字符串在被搜索字符串中首次出现的位置(返回的是数字)
语法:
INSTR("起始搜索位置','被搜索的字符串','需要搜索的字符串')
其中,第一参数可省略,省略则默认为从头开始搜索。
同样地,也可以使用JION连接来代替子查询,提高速度。
|
评分
-
1
查看全部评分
-
|