qq_20800391 2021-12-29 20:55 采纳率: 50%
浏览 19

SQL 如何把行变成列,而且每列对应的结果要减去前面累积的和。

怎么用语句查询得出这样一个表?万分感谢!
不知道需要把行变成列,而且每列对应的结果要减去前面累积的和。请看下图。每个PO对应的型号有表,每个型号对应的工艺流程有表,PO对应的交期也是已知数。怎么统计成生产计划?

img

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-30 00:16
    关注

    如果是oracle数据库,可以用pivot;
    如果是其他的数据库,通用写法就是case when,而且你这固定列了用case when也没毛病。

    另外,如果要写得不套那么多层的话,需要数据库支持开窗函数或者递归,比如sqlserver2017、mysql8、oracle等数据库。

    当然,既然前面这个流程表有固定的值,那么不介意再添加一列,第5行等于10、第4行等于18、第3行等于23,以此类推,这样可以让sql得到简化

    先来个oracle的

    create table step_test (id number,name varchar2(1),hour number);
    insert into step_test (ID, NAME, HOUR)
    values (1, 'A', 8);
    insert into step_test (ID, NAME, HOUR)
    values (2, 'B', 16);
    insert into step_test (ID, NAME, HOUR)
    values (3, 'C', 5);
    insert into step_test (ID, NAME, HOUR)
    values (4, 'D', 8);
    insert into step_test (ID, NAME, HOUR)
    values (5, 'E', 10);
    commit;
     select *
       from (select NAME,
                    date '2021-01-05' - 
                    (sum(hour) over(order by id desc rows 
                    between UNBOUNDED PRECEDING and current row)) / 24 hh
               from step_test x)
     pivot(max(hh)
        for name in('A' A, 'B' B, 'C' C, 'D' D, 'E' E))
    

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错