zoukankan      html  css  js  c++  java
  • SQL行装列PIVOT和列转行UNPIVOT

    数据

    CREATE TABLE student(
      no int,
      ca varchar(20),
      name varchar(50),
      subject  varchar(50),
      scorce int
    );
    
    /* 数据 */
    INSERT INTO student VALUES(1, '1班', '张三', '语文', 85);
    INSERT INTO student VALUES(2, '1班', '张三', '数学', 90);
    INSERT INTO student VALUES(3, '1班', '张三', '英语', 70);
    INSERT INTO student VALUES(4, '1班', '李四', '语文', 70);
    INSERT INTO student VALUES(5, '1班', '李四', '数学', 99);
    INSERT INTO student VALUES(6, '1班', '李四', '英语', 62);
    INSERT INTO student VALUES(7, '1班', '王五', '语文', 82);
    INSERT INTO student VALUES(8, '1班', '王五', '数学', 74);
    INSERT INTO student VALUES(9, '1班', '王五', '英语', 89);
    INSERT INTO student VALUES(10, '2班', '刘晓希', '语文', 77);
    INSERT INTO student VALUES(11, '2班', '刘晓希', '数学', 99);
    INSERT INTO student VALUES(12, '2班', '刘晓希', '英语', 80);
    INSERT INTO student VALUES(13, '2班', '朱鹏', '语文', 87);
    INSERT INTO student VALUES(14, '2班', '朱鹏', '数学', 86);
    INSERT INTO student VALUES(15, '2班', '朱鹏', '英语', 76);
    INSERT INTO student VALUES(16, '2班', '欧阳雪', '语文', 91);
    INSERT INTO student VALUES(17, '2班', '欧阳雪', '数学', 83);
    INSERT INTO student VALUES(18, '2班', '欧阳雪', '英语', 77);

    行转列

    -- case when 实现
    SELECT S.ca,
    SUM(CASE WHEN S.subject='语文' THEN S.scorce ELSE 0 END) AS '语文',
    SUM(CASE WHEN S.subject='数学' THEN S.scorce ELSE 0 END) AS '数学',
    SUM(CASE WHEN S.subject='英语' THEN S.scorce ELSE 0 END) AS '英语'
    FROM dbo.student AS S
    GROUP BY S.ca
    --pivot 实现
    SELECT a.ca,
           [语文],
           [数学],
           [英语]
           INTO #StudentGroup  --导入临时表当中,UNPIVOT例子使用
    FROM
    (
        SELECT S.ca,
               S.subject,
               SUM(S.scorce) AS scorce
        FROM dbo.student AS S
        GROUP BY S.ca,
                 subject
    ) AS S1
    PIVOT
    (
        SUM(S1.scorce)
        FOR S1.subject IN ([语文], [数学], [英语])
    ) a; 

    列转行

    -- UNPIVOT 实现
    SELECT a.ca,
           a.科目,
           a.分数
    FROM #StudentGroup AS SG UNPIVOT(分数 FOR 科目 IN([语文], [数学], [英语])) AS a;

  • 相关阅读:
    创建型设计模式-原型模式(单例) MemberwiseClone()
    Oracle 查看没有释放的链接 和删除,相关sql
    win10 安装 SQL Developer 工具
    修改nuget包默认存放路径 win10
    使用端口查询
    未能加载文件或程序集“Newtonsoft.Json, Version=12.0.0.0,
    微信错误码
    sqlserver 时间转换记录
    Homebrew 使用指南
    在Mac检查安装的.net core 版本
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/3398328.html
Copyright © 2011-2022 走看看