• 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  项目

  • 相关阅读:
    【Windows】Edge浏览器自动更新服务启用选禁用被拒绝访问的解决方案
    TiDB Lightning 简介
    Docker-compose
    How to design a database storage model for water network information system
    【Axure教程】用中继器制作知识图谱
    因果推断 之 初介绍 + 案例分析
    Automatic differentiation package - torch.autograd
    uniapp ui安装 阿里图标库使用 报错 Assignment to constant variable.
    如何优化网站排名(百度SEO指南与优化布局方法)
    Tensorflow pb模型转tflite,并量化
  • 原文地址:https://blog.csdn.net/www_rsqdz_net/article/details/128061573