• SQL 转置查询


    1.普通查询:
    select  *  from    chengji  
    结果:
    xm zs ls we
    语文 54 78 89
    数学 87 67 95

    2.转置:
    SELECT  'zhangsan'  AS  项目,  [语文],  [数学]
    FROM    
    (
        SELECT  xm,zs  FROM  chengji
    )  AS  c1    
    PIVOT    
    (    
        sum(zs)  
        FOR  xm  IN  ([语文],  [数学]  )    
    )  AS  PivotTable
    union
    SELECT  'lisi'  AS  项目,  [语文],  [数学]
    FROM    
    (
        SELECT  xm,ls  FROM  chengji
    )  AS  c1    
    PIVOT    
    (    
        sum(ls)  
        FOR  xm  IN  ([语文],  [数学]  )    
    )  AS  PivotTable
    union
    SELECT  'wanger'  AS  项目,  [语文],  [数学]
    FROM    
    (
        SELECT  xm,we  FROM  chengji
    )  AS  c1    
    PIVOT    
    (    
        sum(we)  
        FOR  xm  IN  ([语文],  [数学]  )    
    )  AS  PivotTable
    结果:
    项目 语文 数学
    lisi 78 67
    wanger 89 95
    zhangsan 54 87

    3.另一种方法:
    select  项目,sum(语文)  AS  语文,sum(数学)  AS  数学  from  (
    SELECT  'zhangsan'  AS  项目,IIF(xm='语文',zs,0)  AS  语文,IIF(xm='数学',zs,0)  AS  数学
    FROM    
    (
        SELECT  xm,zs  FROM  chengji
    )  AS  a    
    union
    SELECT  'lisi'  AS  项目,IIF(xm='语文',ls,0)  AS  语文,IIF(xm='数学',ls,0)  AS  数学
    FROM    
    (
        SELECT  xm,ISNULL(ls,0) as ls FROM  chengji
    )  AS  b    
    union
    SELECT  'wanger'  AS  项目,IIF(xm='语文',we,0)  AS  语文,IIF(xm='数学',we,0)  AS  数学
    FROM    
    (
        SELECT  xm,we  FROM  chengji
    )  AS  c  
    union
    SELECT  '合计'  AS  项目,IIF(xm='语文',hj,0)  AS  语文,IIF(xm='数学',hj,0)  AS  数学
    FROM    
    (
        SELECT  xm,sum(zs)+sum(ls)+sum(we)  as  hj  FROM  chengji  group  by  xm
    )  AS  d  

    )  as  x
    group  by  项目

    4.mysql  写法:
    select  项目,sum(语文)  AS  语文,sum(数学)  AS  数学  from  (
    SELECT  'zhangsan'  AS  项目,IF(xm='语文',zs,0)  AS  语文,IF(xm='数学',zs,0)  AS  数学
    FROM    
    (
        SELECT  xm,ifnull(zs,0) as zs  FROM  mymap.chengji
    )  AS  a    
    union
    SELECT  'lisi'  AS  项目,IF(xm='语文',ls,0)  AS  语文,IF(xm='数学',ls,0)  AS  数学
    FROM    
    (
        SELECT  xm,ls  FROM  mymap.chengji
    )  AS  b    
    union
    SELECT  'wanger'  AS  项目,IF(xm='语文',we,0)  AS  语文,IF(xm='数学',we,0)  AS  数学
    FROM    
    (
        SELECT  xm,we  FROM  mymap.chengji
    )  AS  c  
    union
    SELECT  '合计'  AS  项目,IF(xm='语文',hj,0)  AS  语文,IF(xm='数学',hj,0)  AS  数学
    FROM    
    (
        SELECT  xm,sum(zs)+sum(ls)+sum(we)  as  hj  FROM  mymap.chengji  group  by  xm
    )  AS  d  

    )  as  x
    group  by  项目

  • 相关阅读:
    2022_NP_MIADPD
    ChatGPT(1):ChatGPT初识
    毕设准备---Cookie,Session
    使用Python PyQt5完成残缺棋盘覆盖仿真作业
    基于Java+SpringBoot+Vue+echarts校园资料分享平台设计和实现
    【计算机网络】 拥塞控制
    Redux 4.2 版本发布由createStore --》configureStore
    Python基础(五)
    毕业设计选题uniapp+springboot新闻资讯小程序源码 开题 lw 调试
    20天深度复习JavaSE的详细笔记(十三)——集合(Set、Collections、Map、集合嵌套)
  • 原文地址:https://blog.csdn.net/www_rsqdz_net/article/details/128061573