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 userid' select @sql=@sql+',max(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 userid' print(@sql) exec (@sql)
打印出来的结果:
select userid,max(case Code when 'HWP30' then Price else 0 end) [HWP30], max(case Code when 'MZ5' then Price else 0 end) [MZ5], max(case Code when 'XM8' then Price else 0 end) [XM8], max(case Code when 'XM9' then Price else 0 end) [XM9], max(case Code when 'XMK20' then Price else 0 end) [XMK20] from MobilePhone group by userid
执行结果如图:这是没有加上max()取最大值,按userid分组
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
6. 多行数据拼凑成一格 STUFF函数 类似于 replace(),用于替换字符串的内容, For XML Path 将查询结果集以XML形式展现,将多行的结果,展示在同一行 ,两者可结合使用
https://www.cnblogs.com/liuchenxing/p/9253897.html
select WorkflowSchema, ActionName=(STUFF((select ',' + ActionName from [dbo].[Workflow_Action] a where a.WorkflowSchema=b.WorkflowSchema for xml path('')),1,1,'')) --where条件必须加上 from [dbo].[Workflow_Action] b group by WorkflowSchema