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

  • 相关阅读:
    selenium产生的垃圾文件清理
    英语学习词根法
    ecommerce学习
    tfs2012安装
    转载文件,英语学习
    Mishka and Divisors CodeForces
    Codeforces Round #364 (Div. 1) (差一个后缀自动机)
    莫比乌斯反演练习
    bzoj 1267 Kth Number I (点分治,堆)
    程序员的绘图利器 — Gnuplot
  • 原文地址:https://www.cnblogs.com/yeminglong/p/2231319.html
Copyright © 2011-2022 走看看