总库存股票 mysql

标签: sql MySQL PHP
发布时间: 2017/1/13 1:26:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如果你不介意的话,我有跟进的关于这个问题我的问题。

张总流库存 php mysql 进出

Table A
=======================================================
**id** | **code** | **status** | **total** | **date** |
1      | B01      | IN         | 500       |2013-01-15|
2      | B01      | OUT        | 100       |2013-01-20|
3      | B01      | OUT        | 200       |2013-02-01|
4      | B01      | IN         | 300       |2013-02-05|

从上面的表,我想这样的输出。

Table A
===================================================================================
**id** | **code** | **status** | **total** | **date** | **stock** | 1st month stock
1      | B01      | IN         | 500       |2013-01-15| 500       | -
2      | B01      | OUT        | 100       |2013-01-20| 400       | 500
3      | B01      | IN         | 200       |2013-02-01| 600       | 400
4      | B01      | OUT        | 300       |2013-02-05| 300       | 600
5      |          |            |           |          |           | 300

如何能够做到使用 mysql?有什么办法吗?

股票列我已经实现,使用此方法

select t.*, @stock := @stock + case when status = 'IN' 
                                    then total
                                    else -total  
                               end as stock
from your_table t
cross join (select @stock := 0) s
order by t.id

从我先前的问题,帮助我我真的很新的 mysql

解决方法 1:

基于你已经有的可以向选择列表、 添加另一种表达

select t.*, @stock AS `1st month stock`, @stock := ...

注︰ 返回的当前值的 @stock 需要来之前一个新的值分配给 @stock 所以选择列表中列的顺序是略有不同,比所需的输出所示。


只是基于您当前的查询,向您选择的列表,例如返回另一列,添加一个新的表达式

select t.*
     , @stock AS `1st month stock`
     , @stock := @stock + case when status = 'IN' 
                                then total
                                else -total  
                           end as stock
from your_table t
cross join (select @stock := 0) s
order by t.id
官方微信
官方QQ群
31647020