zoukankan      html  css  js  c++  java
  • SQL查询案例:行列转换[行转列, 使用 CASE WHEN 处理]

    行列装换--使用CASE WHEN

    测试表与测试数据

    CREATE TABLE TestRowCol (

    name   VARCHAR(10),

    place VARCHAR(10),

    valuw INT

    );

    INSERT INTO TestRowCol VALUES ('张三', '东', 1);

    INSERT INTO TestRowCol VALUES ('张三', '南', 2);

    INSERT INTO TestRowCol VALUES ('张三', '西', 3);

    INSERT INTO TestRowCol VALUES ('张三', '北', 4);

    INSERT INTO TestRowCol VALUES ('李四', '东', 5);

    INSERT INTO TestRowCol VALUES ('李四', '南', 6);

    INSERT INTO TestRowCol VALUES ('李四', '西', 7);

    INSERT INTO TestRowCol VALUES ('李四', '北', 8);

    要求

    将标题为

    name       place      valuw

    ---------- ---------- -----------

    修改为

    Name   东  南  西  北

    思路

    CASE WHEN + GROUP BY处理

    实现

    SELECT

    name,

    SUM(CASE WHEN place = '东' THEN valuw ELSE '0' END) AS 东,

    SUM(CASE WHEN place = '南' THEN valuw ELSE '0' END) AS 南,

    SUM(CASE WHEN place = '西' THEN valuw ELSE '0' END) AS 西,

    SUM(CASE WHEN place = '北' THEN valuw ELSE '0' END) AS 北

    FROM

    TestRowCol

    GROUP BY

    name

    执行结果

    name       东          南          西          北

    ---------- ----------- ----------- ----------- -----------

    李四                   5           6           7           8

    张三                   1           2           3           4

     

     

    行列装换--使用PIVOT  (SQL Server 2005 及以上版本可用)

    测试表与测试数据

    同行列装换--使用CASE WHEN

    实现

    SELECT

    name,

    tmp.[东] 东,

    tmp.[南] 南,

    tmp.[西] 西,

    tmp.[北] 北

    FROM

    TestRowCol

    PIVOT(

    SUM(valuw)

    FOR place IN ([东], [南], [西], [北] )

    ) tmp

    ORDER BY

    name

    如果这篇文章对您有帮助,您可以打赏我

    技术交流QQ群:15129679

  • 相关阅读:
    数据类型及用法
    NFS与SSH
    nginx服务,nginx反向代理
    rpm软件包管理
    磁盘分区,文件系统,软链接和硬链接,内存和进程管理
    Linux常用命令,文件目录和权限管理
    操作系统与网络协议(day3)
    计算机基础之硬件简介(Day2)
    QT写串口
    485传输
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2231319.html
Copyright © 2011-2022 走看看