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

  • 相关阅读:
    Fabric升级智能合约
    LLM大模型推理加速 vLLM;Qwen vLLM使用案例
    洞态在某互联⽹⾦融科技企业的最佳落地实践
    安装elasticsearch
    PHP 同城服务共享茶室小程序系统是如何实现的?
    EF Core: 使用AsNoTracking减少内存调用 / 实体跟踪的技巧
    有什么学习 Web 前端的技巧分享?
    JavaWeb---HTML
    Spring目录结构和基础JAR包介绍
    Rescue-Prime hash STARK 代码解析
  • 原文地址:https://blog.csdn.net/www_rsqdz_net/article/details/128061573