如何提取余额数量

时间:2011-02-25 15:27:58

标签: sql

我有一张这样的表: -

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

我需要知道使用SQL& amp;的基于FIFO的余额是多少?最终输出将如下所示: -

Date            Serial      Qty 
20110106         ABC         1

感谢。

4 个答案:

答案 0 :(得分:0)

你只想从表中挑出一条记录?喜欢这个?

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

答案 1 :(得分:0)

我想你想要像

这样的东西
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

请注意,我猜你想要的是截至最后一天的总剩余数量,并且通过将特定SERIAL表中所有行的正数量与正数相比较而获得此数量。我认为这很接近,但我不确定你是如何获得DATE值的

答案 2 :(得分:0)

类似的东西:

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子句过滤掉Total为零的任何内容:

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

Serial  Total Size
  ABC     1    24

答案 3 :(得分:0)

  SELECT MAX(date) AS date, serial, ABS(SUM(qty * size)) AS size, SIGN(SUM(qty * size)) AS qty
    FROM your_table
GROUP BY serial