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

  • 相关阅读:
    el-table单元格新增、编辑、删除功能
    div 拖拽
    dataTable 分页用法总结
    pc端字体大小计算以及echart中字体大小计算
    pc端字体大小自适应几种方法
    AB PLC教程
    Electric p8激活教程
    三菱FX系列PLC教程
    Visual Studio 2015简体中文企业版/专业版下载+有效激活密钥
    servlet在mvc里的分层,驻留内存的疑问?
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2231319.html
Copyright © 2011-2022 走看看