zoukankan      html  css  js  c++  java
  • 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.学生姓名
  • 相关阅读:
    目录-富爸爸穷爸爸
    目录-高效能人士的七个习惯(精华版)
    目录-卓有成效的管理者
    计算机网络自顶向下方法目录
    计算机网络_第7版_谢希仁_目录
    计算机网络各层协议
    TCP_IP详解卷一目录
    http 权威指南 目录
    Redis 知识体系
    Apache Commons 列表
  • 原文地址:https://www.cnblogs.com/obge/p/13722463.html
Copyright © 2011-2022 走看看