zoukankan      html  css  js  c++  java
  • SQL提高

    感觉不错,学习下

    问题:表Table1的结构为: 
    姓名 科目 成绩 
    张三 语文  20  
    张三 数学  30  
    张三 英语  50  
    李四 语文  70  
    李四 数学  60  
    李四 英语  90  

    怎样通过select语句把他变成以下结构: 
    姓名 语文 数学 英语 
    张三  20   30   50  
    李四  70   60   90

    方法1:

    select DISTINCT D.姓名,A.语文,B.数学,C.英语 from destTbl as D left join 

    (select 姓名,成绩 as 语文  from destTbl where 科目 = '语文') AS A on A.姓名=D.姓名 left join 

    (select 姓名,成绩 as 数学  from destTbl where 科目 = '数学') AS B on B.姓名=D.姓名 left join

    (select 姓名,成绩 as 英语  from destTbl where 科目 = '英语') AS C on C.姓名=D.姓名 

    方法2:

    select 姓名,
    max(case 科目 when '语文' then 成绩 else 0 end) 语文,
    max(case 科目 when '数学' then 成绩 else 0 end) 数学,
    max(case 科目 when '英语' then 成绩 else 0 end) 英语
    from destTbl
    group by 姓名

    问题2:

     

    表一(Table1)
    商品名称mc   商品总量sl
       A          100
       B          120
    表二(Table2)
    商品名称mc   出库数量sl
        A          10
        A          20
        B          10
        B          20
        B          30

    用一条SQL语句算出商品A,B目前还剩多少?要求用SQl-86和SQL-92两种标准写法分别实现

    方法:

    select A.mc,A.s1,B.s2,( A.s1 - (case when B.s2 is Null then 0 else B.s2 end)  ) as 差 from table1 as A left join

    ( select mc,sum(s2) as s2 from table2 group by mc ) as B on A.mc = B.mc


     


  • 相关阅读:
    Mac zsh: command not found zsh 所有命令在终端失效
    Java根据FreeMarker模板生成Word(doc)文档(带图片)
    2021年Java面试总结——自我篇
    toArray转换踩坑 java.lang.ClassCastException
    并发和并行
    protoBuf3学习
    StringBuffer和StringBuilder区别
    深拷贝和浅拷贝
    从不订购的客户
    使用jenkins遇到的问题汇总
  • 原文地址:https://www.cnblogs.com/wellma/p/1439902.html
Copyright © 2011-2022 走看看