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.学生姓名
  • 相关阅读:
    [微软认证]MCP问题解答
    邮件服务
    QueryString 整站过滤
    今天开始安卓的底层开发吧。
    所谓的回调函数
    UTF8 to unicode
    TCP/IP中的拥塞窗口控制机制
    (转)前端页面,页内锚定位分析
    远程连接Sql Server 2008 R2 命名实例
    字符编码研究
  • 原文地址:https://www.cnblogs.com/obge/p/13722463.html
Copyright © 2011-2022 走看看