Sql 如何提取余额数量

Sql 如何提取余额数量,sql,Sql,我有一张这样的桌子:- TABLE A -------------------------------- Date | Serial | Qty -------------------------------- 20110101 ABC 1 20110102 ABC -1 20110105 ABC 1 20110106 A

我有一张这样的桌子:-

TABLE A -------------------------------- Date | Serial | Qty -------------------------------- 20110101 ABC 1 20110102 ABC -1 20110105 ABC 1 20110106 ABC 1 20110108 ABC -1
Date            Serial      Qty 
20110106         ABC         1

谢谢。

您只想从表中选择一条记录吗?像这样

SELECT * FROM your_table WHERE Date = '20110106' AND Serial = 'ABC'

我想你想要像这样的东西

SELECT serial, max(date), 1 qty, sum( qty*size ) size
  FROM tableA
 GROUP BY serial
如果最终输出为负数,那么无论您使用什么数据库引擎,都应该具有与Oracle的SIGN和ABS函数相当的功能

SELECT serial, max(date), sign( sum( qty*size ) ) qty, abs( sum( qty*size ) ) size
  FROM tableA
 GROUP BY serial
请注意,我猜您需要截至最后一天的总剩余量,您可以通过将表中特定
序列
的所有行的正数量与负数量进行净额计算得到。我认为这很接近,但我不确定如何获得日期值

select Serial, sum(qty) as Total, Size from table_a group by Serial, Size
将给你:

TABLE A
Serial  Total Size
  ABC     0    23
  ABC     0    22
  ABC     1    24
当然,您可以添加where子句来进一步限制查询:

select Serial, sum(qty) as Total, Size from table_a where Serial='ABC' and Size=24 group by Serial, Size
将为您提供24号系列ABC的信息,仅限于:

Serial  Total Size
  ABC     1    24
或者,您可以使用having子句过滤掉总计为零的任何内容:

select Serial, sum(qty) as Total, Size from table_a group by Serial, Size having sum(qty) <> 0

Serial  Total Size
  ABC     1    24
选择序列,总和(数量)为总计,从表中按序列分组大小,总和(数量)为0的大小
序列总大小
ABC 1 24

这个问题毫无意义。你想让它如何决定显示什么日期和大小?还有,什么数据库platofrm?好的,编辑2011年1月8日的行,使其大小为25,并保留所需的输出24,这让我完全困惑。如果这是一个FIFO队列,则1/1上的库存量可能是23,然后在1/2上减少到0。5月1日增至22日,6月1日增至46日。然后在1/8时下降到21。这21个单位恰好是1/6订单的,但是如果还有多个订单的单位,会发生什么呢?@Justin-不应该看大小。在FIFO队列中,库存在1/1上为1,然后在1/2上降至0。它在1/5和1/6分别增加到1和2。然后在1/8时下降到1。1个单位的余额恰好是1/6。因此,系统只需显示1/6的全部详细信息,即:-日期序列数量大小20110106 ABC 124@Bob-好的。如果不是订单的大小,
SIZE
代表什么?为什么要返回1/6行而不是1/8行或1/5行?我编辑了上述问题&建议的答案可能不合适,尤其是在大小方面。可以调整吗?我编辑了上面的问题&建议的答案可能不合适,特别是在尺寸方面。可以调整吗?@Bob-好的。我现在对样本数据的编辑更加困惑。我就问题本身发表了评论。
  SELECT MAX(date) AS date, serial, ABS(SUM(qty * size)) AS size, SIGN(SUM(qty * size)) AS qty
    FROM your_table
GROUP BY serial