zoukankan      html  css  js  c++  java
  • 横纵表转换的几种方法

    上一篇是横纵表转换的标准写法

    横转纵没什么好说的,unin,大家都熟悉。

    这里主要说纵转横。

    横转纵与纵转横相对,那么,与unin相对的命令是什么?

    JOIN,说到这里,可能有很多人已经明白之后的主要内容了。

    不用CASE用连接实现转换

    方法一:

     

    语文成绩表

    select * 
    from Table_A A
    Where A.Course='语文'

    数学成绩表
    英语成绩表

     

    select A.Name,A.Grade as 语文,B.Grade as 数学,C.Grade as 英语 from
    (select * 
    from Table_A A
    Where A.Course='语文') A,
    (select * 
    from Table_A A
    Where A.Course='数学') B,
    (select *
    from Table_A A
    Where A.Course='英语') C
    where A.Name=B.Name 
    and B.Name=C.Name
    View Code


    这里没有李四的数据,因为内连接没有数据


    改为左连

    select A.Name,ISNULL(A.Grade,0) as 语文,ISNULL(B.Grade,0) as 数学,ISNULL(C.Grade,0) as 英语 from
    (select * 
    from Table_A A
    Where A.Course='语文') A
    left join 
    (select * 
    from Table_A A
    Where A.Course='数学') B
    on A.Name=B.Name
    left join
    (select *
    from Table_A A
    Where A.Course='英语') C
    on B.Name=C.Name
    View Code

    好了,这下就可以了,再加个空值处理

    方法二:

    之后我们试试在查询里写select

    select Distinct(A.Name),
    ISNULL((select Grade from Table_A B where B.Course='语文' and A.Name=B.Name),0)as 语文,
    ISNULL((select Grade from Table_A B where B.Course='数学' and A.Name=B.Name),0)as 数学,
    ISNULL((select Grade from Table_A B where B.Course='英语' and A.Name=B.Name),0)as 英语
    from Table_A A

    也可以不用Distinck用Group分组。

    有何感想? 

     

    再贴下最标准的方法了,而且不用多表的关联效率用了CASE和聚集函数。

    这种方式不用表间连接,效率最高,前面的只是复习加练习,加深理解,要用还用标准的。

    CASE

    select Name,(case Course when '语文' then Grade else 0 end) as 语文,
    (case Course when '数学' then Grade else 0 end) as 数学,
    (case Course when '英语' then Grade else 0 end) as 英语
    from Table_A
    View Code

    +聚集函数

    select Name, 
    
    sum(case Course when ‘语文‘ then Grade else 0 end) as 语文,
    
    sum(case Course when ‘数学‘ then Grade else 0 end) as 数学,
    
    sum(case Course when ‘英语‘ then Grade else 0 end) as 英语 
    
    from TableA 
    
    group by Name 

     

  • 相关阅读:
    【转】Redis和Memcache对比及选择
    Ubuntu下php环境的搭建
    【HTML和CSS】总结
    【python】 The different between ' %r ' and ' %s '
    Learn Python The Hard Way
    Vim 插件配置及快捷键
    sublime-text 插件配置
    mysql-5.7在CentOS-7下的rpm安装
    oracle pdb基本管理
    Oracle 12cR2 Installation On CentOS-7
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/3141403.html
Copyright © 2011-2022 走看看