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

  • 相关阅读:
    使用python selenium webdriver模拟浏览器
    Xen基本原理
    Xen安装部署和基本原理
    Setups For Debugging QEMU with GDB and DDD
    Performance comparison amount different cache mode of KVM
    I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]
    Useful plug-in collection of jenkins
    How to get YAST2 log during installing
    How to create a "BOOT USB DISK" for EXSI6.0
    php设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2231319.html
Copyright © 2011-2022 走看看