ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL

2020-06-17 15:51:30  阅读:287  来源: 互联网

标签:case end Price when else SQL 科目


1.假如目前有三个表,员工表(EB) ,字段有员工编号(ECODE),姓名(ENAME):考核科目分数表(KB) ,字段有员工编号(ECODE),科目编号(KECODE),分数:科目表(MB) ,字段有科目编号(KECODE),科目名称(KENAME)。

统计每门科目的员工选择科目人数(超过5人的科目才统计),要求输出科目编号和选择科目人数,查询结果按人数降序排序,若人数相同,按科目编号升序排序。


答:解题思路 输出科目编号和选择科目人数 按科目编号分组

SELECT KECODE,COUNT(*) FROM KB GROUP BY KECODE HAVING COUNT(*)>5 ORDER BY COUNT(*) DESC ,KECODE ASC

 

 

2.使用分【100-85】【85-70】【70-60】 ,[<60]米统计各科分数,分别统计:各分数段人数,科目编号和科目名称。
答: 解题思路:按分数段分组,先把kb每个分数做一个分数段标识,再按分数段分组

SELECT A.KEcode,MB.KENAME,A.GRADE,COUNT(*) FROM (
SELECT CASE WHEN SCORE >= 85 and SCORE<=100 THEN 'A'

WHEN SCORE >= 75 and SCORE< 85 THEN 'B' 
WHEN SCORE >= 60 and SCORE< 75 THEN 'C'
WHEN SCORE < 60 THEN 'D' END 'GRADE',*
FROM KB ) A LEFT JOIN MB ON A.KECODE =MB.KECODE 
GROUP BY A.GRADE, A.KEcode,MB.KENAME

 

3.查询维修完全部课程的同学姓名编号
解题思路: 查询 所修科目数 (小于) 科目总数 的学生信息

SELECT * FROM EB WHERE (
(SELECT COUNT(*) FROM KB WHERE EB.ECode=KB.ECODE)
<(SELECT COUNT(*) FROM MB ))

 

4.行转列(存储过程实现)

 

 declare @sql varchar(500)
 
set @sql='select code'
 
select @sql=@sql+',case Code when '''+code+''' then Price else 0 end ['+code+']'
 
from(select distinct code from MobilePhone)a--同from tb group by课程,默认按课程名排序
  print(@sql)
set @sql=@sql+' from MobilePhone group by code,Price'
 
 print(@sql)

打印出来的结果:

select code,
case Code when 'HWP30' then Price else 0 end [HWP30],

case Code when 'MZ5' then Price else 0 end [MZ5],

case Code when 'XM8' then Price else 0 end [XM8],

case Code when 'XM9' then Price else 0 end [XM9],

case Code when 'XMK20' then Price else 0 end [XMK20]
select code,

case Code when 'HWP30' then Price else 0 end [HWP30],

case Code when 'MZ5' then Price else 0 end [MZ5],

case Code when 'XM8' then Price else 0 end [XM8],

case Code when 'XM9' then Price else 0 end [XM9],

case Code when 'XMK20' then Price else 0 end [XMK20] from MobilePhone group by code,Pric

执行结果如图:

 

 

5.分页

 

CREATE PROCEDURE paging_procedure
@pageIndex int, -- 第几页
@pageSize int  -- 每页包含的记录数
as
begin 
select top (@pageSize) *     -- 这里注意一下,不能直接把变量放在这里,要用select top ()
    from (select row_number() over(order by id desc) as rownumber,* 
            from [dbo].[MobilePhone]) temp_row 
    where rownumber>(@pageIndex-1)*@pageSize;
end

 

标签:case,end,Price,when,else,SQL,科目
来源: https://www.cnblogs.com/LearningFromyou/p/13152732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有