douyiavxxh02727 2016-07-11 05:32
浏览 49
已采纳

自引用sql查询中基于优先级的订单不足

I am a basic developer not having advanced skills. I have an order processing system in php/mysql and want to calculate the shortages based on priority in SQL. Presently I use php arrays for this but i want to achieve this in database itself.

Here is the queries i have

enter image description here

And this is what i want to achieve

enter image description here

Thanks.

  • 写回答

1条回答 默认 最新

  • doumisha5081 2016-07-11 07:46
    关注

    The inner query orders by product and orderid and calculates a running total resetting on product change.

    /*
    drop table orders;
    
    create table orders (orderid varchar(6),productid varchar(10),reqqty int);
    
    create table stock (productid varchar(6), stock int);
    
    truncate table orders;
    insert into orders values
    ('OR250','A45',100),('OR250','A55',200),('OR250','A65',400),
    ('OR260','A45',150),('OR260','A55',25),
    ('OR270','A55',100),('OR270','A65',50),('OR270','B15',500)
    ;
    
    TRUNCATE TABLE STOCK;
    INSERT INTO STOCK VALUES
    ('A45',200),('A55',250),('A65',180),('A75',300),('A85',400),('A95',780),('B15',150),('B25',225);
    */
    
    SELECT  T.ORDERID,T.PRODUCTID,T.REQQTY,T.SHORTAGE,T.STOCKREMAINING AS STOCK
    FROM
    (
    SELECT  @RN:=IF (O.PRODUCTID  <> @PRV,1,@RN+1) RN,
                O.ORDERID,O.PRODUCTID,O.REQQTY
                ,S.PRODUCTID AS SPRODUCTID,S.STOCK
                ,@PRV:=O.PRODUCTID PREVPROD
                ,@RT:=IF(@RT=0 OR @RN = 1,S.STOCK-O.REQQTY,@RT - O.REQQTY)  RT
                ,CASE WHEN @RT < 0 THEN @RT * -1 ELSE 0 END AS SHORTAGE
                ,CASE WHEN @RT >= 0 THEN @RT ELSE 0 END AS STOCKREMAINING
    FROM    (SELECT @RN:=0) RN,(SELECT @PRV:='') PRV,(SELECT @RT:=0) RT,ORDERS O
    JOIN  STOCK  S ON S.PRODUCTID = O.PRODUCTID
    ) T
    ORDER   BY  T.ORDERID,T.PRODUCTID
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档