zoukankan      html  css  js  c++  java
  • 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 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

  • 相关阅读:
    Java中的BoneCP数据库连接池用法
    css 属性选择器笔记
    px,em,rem的区别
    谈谈newDate()的简单使用 JS
    user-select属性用法
    闭包解决的问题
    jQuery 中position()与offset()的区别
    attr() VS prop()
    .toArray()与jQuery.makeArray()的区别
    浏览器的缓存控制
  • 原文地址:https://www.cnblogs.com/LearningFromyou/p/13152732.html
Copyright © 2011-2022 走看看