• SQL ----- 多对多查询 和 行转列


    构建多对多关联大致有两种方式:

      一种是借助第三方表记录两者主键进行关联,

      另一种是通过增加表中字段,通过分隔符分隔记录关联表的信息

    查询的时候注意 使用限定,通过表名,列名

    其中转化的话 可以参考之前写的 convert 转化

     

     将上述行转列,查看学生关注的岗位

    小计一下:

    -- 行转列  子查询、分组查询 和 case -when 结合使用
    --注意 聚合函数max()不仅可以作用于数值类型的数据,还可以作用于字符串类型数据和日期时间类型的数据。而sum(),只是作用于数值类型数据,用于返回指定数据的和,空值会被默认忽略
    --  查询表中的字段为子查询 as 的字段 
    select 
    tbSG.学生姓名 '学生姓名',
    max(case tbSG.岗位名称 when '22' then '理发' else '0' end) '关注1',
    max(case tbSG.岗位名称 when '09' then '厨师' else '0' end) '关注2',
    max(case tbSG.岗位名称 when '通天塔' then '美容' else '0' end) '关注3',
    max(case tbSG.岗位名称 when '11' then '按摩' else '0' end) '关注4'
    from (
    
    -- 子查询的内容为 多对多查询的内容
    select     
         tbStudent.StuMark as 学号,
         tbStudent.StuName as 学生姓名,
         tbStudent.StuMobile as 学生手机号,
         tbUGongSiGangWei.GongSi_Name as 公司名称,      
         tbUGongSiGangWei.GangWei_Name as 岗位名称,
         tbUGongSiGangWei.GangWei_UserSum as 招聘数量,
         tbUGongSiGangWei.GongSi_4001_Name as 所在地区,
         tbUGongSiGangWei.GongSi_Address as 公司地址,
         tbUGongSiGangWei.GongSi_Tel as 联系人手机号,
         tbUGongSiGangWei.GongSi_User as 联系人,
         convert(varchar(50),tbUGongSiGangWei_Student.CreateTime,23) as 关注时间 
    from tbUGongSiGangWei,tbStudent,tbUGongSiGangWei_Student 
    
    where tbUGongSiGangWei.GongSiGuid = tbUGongSiGangWei_Student.GongSiGuid 
    and   tbStudent.StudentGuid = tbUGongSiGangWei_Student.StudentGuid
    
    ) tbSG
    -- 通过学生姓名进行分组展示
    group by tbSG.学生姓名
  • 相关阅读:
    Vue之仿百度搜索框
    Vue之交互
    Vue之键盘事件
    Vue之事件冒泡
    Vue之阻止默认行为
    sql注入常用注释符总结
    什么是Git
    Github部署博客
    php笔记
    JavaScript(更新中)
  • 原文地址:https://www.cnblogs.com/obge/p/13722463.html
Copyright © 2020-2023  润新知