zoukankan      html  css  js  c++  java
  • Mysql-sql行转列

    原始数据如下图所示:(商品的销售明细)
    date=业务日期;Item=商品名称;saleqty=销售数量

    -- 建立测试数据(表)
    create table test (Date varchar(10), item char(10),saleqty int);
    insert test values('2010-01-01','AAA',8);
    insert test values('2010-01-02','AAA',4);
    insert test values('2010-01-03','AAA',5);
    insert test values('2010-01-01','BBB',1);
    insert test values('2010-01-02','CCC',2);
    insert test values('2010-01-03','DDD',6);

    实现的方法和思路如下:两个方法

    -- 实现结果的静态SQL语句写法
    -- 整理报表需要的格式

    方法一:case item when x then xx when y then yy end  

    select date,
    case item when 'AAA' then saleqty end as AAA,
    case item when 'BBB' then saleqty end as BBB,
    case item when 'CCC' then saleqty end as CCC,
    case item when 'DDD' then saleqty end as DDD
    from test;

    方法二:if(条件判断,成立结果,不成立结果)

    select date,
    if (item = 'AAA',saleqty,null) as AAA,
    if (item = 'BBB',saleqty,null) as BBB,
    if (item = 'CCC',saleqty,null) as CCC,
    if (item = 'DDD',saleqty,null) as DDD
    from test;

    -- 按日期汇总行

    select date,
    sum(case item when 'AAA' then saleqty end)as AAA,
    sum(case item when 'BBB' then saleqty end)as BBB,
    sum(case item when 'CCC' then saleqty end)as CCC,
    sum(case item when 'DDD' then saleqty end)as DDD
    from test group by date;

    select date,
    sum(if (item = 'AAA',saleqty,null)) as AAA,
    sum(if (item = 'BBB',saleqty,null)) as BBB,
    sum(if (item = 'CCC',saleqty,null)) as CCC,
    sum(if (item = 'DDD',saleqty,null)) as DDD
    from test group by date;

    -- 处理数据:将空值的栏位填入数字0;

    select date,
    ifnull(sum(case item when 'AAA' then saleqty end) ,0)as AAA,
    ifnull(sum(case item when 'BBB' then saleqty end) ,0)as BBB,
    ifnull(sum(case item when 'CCC' then saleqty end) ,0)as CCC,
    ifnull(sum(case item when 'DDD' then saleqty end) ,0)as DDD
    from test group by date;

    select date,
    ifnull(sum(if (item = 'AAA',saleqty,null)),0) as AAA,
    ifnull(sum(if (item = 'BBB',saleqty,null)),0) as BBB,
    ifnull(sum(if (item = 'CCC',saleqty,null)),0) as CCC,
    ifnull(sum(if (item = 'DDD',saleqty,null)),0) as DDD
    from test group by date;

    静态SQL语句编写完成!

    其实有一步骤有点多余:可以直接if(,,0),而不是if(,,null)

    select date,
    if (item = 'AAA',saleqty,0) as AAA,
    if (item = 'BBB',saleqty,0) as BBB,
    if (item = 'CCC',saleqty,0) as CCC,
    if (item = 'DDD',saleqty,0) as DDD
    from test;

    select date,
    sum(if (item = 'AAA',saleqty,0)) as AAA,
    sum(if (item = 'BBB',saleqty,0)) as BBB,
    sum(if (item = 'CCC',saleqty,0)) as CCC,
    sum(if (item = 'DDD',saleqty,0)) as DDD
    from test group by date;

     静态SQL语句编写完成!

    参考网址https://www.cnblogs.com/ShaYeBlog/p/3594517.html

    ================================================================================================================

    三月的时候就遇到了行转列。

    计算一个表中的字段被清洗和标准化被命中的比例和原因。

    转成行输出。

  • 相关阅读:
    python的WeakKeyDictionary类和weakref模块的其他函数
    用python做的windows和linx文件夹同步。解决自动同步、加快传输大量小文件的速度、更丰富的文件上传过滤设置。
    超牛 猴子补丁,修改python内置的print
    python编程范式培训文档,主要是结合4种代码和,对oop和面向过程编程区别和oop转化公式培训。
    oop的方式来操纵时间
    使用python对文件夹里面所有代码行数进行统计。
    DeBug Python代码全靠print函数?换用这个一天2K+Star的工具吧,改进版
    一个有界任务队列的python thradpoolexcutor, 直接捕获错误日志
    python flask多个app应用组合
    数据库笔试面试题库(Oracle、MySQL等)
  • 原文地址:https://www.cnblogs.com/wqbin/p/10223894.html
Copyright © 2011-2022 走看看