在同一数据表中选择计算数据

时间:2014-10-27 02:10:14

标签: sql sql-server tsql

我的表是

itemcode  in out  sum value   datetime     PP   
-------|---|---|-----------|-----------|---------   
A1234  | 1 | 0 | 100       |04/03/2009 | E01  
A1234  | 0 | 1 | -100      |05/03/2009 | E01    
A1234  | 1 | 0 | 100       |06/03/2009 | E01   
A1234  | 0 | 1 | -100      |07/03/2009 | E01   
A1234  | 1 | 0 | 100       |08/03/2009 | E01   
A1234  | 9 | 0 | 900       |09/03/2009 | S01  
A1234  | 0 | 3 | -300      |10/03/2009 | S01  
A1234  | 8 | 0 | 800       |11/03/2009 | S01 
A1235  | 9 | 0 | 900       |12/03/2009 | E01   
A1235  | 0 | 2 | -200      |13/03/2009 | E01  
A1235  | 0 | 3 | -300      |14/03/2009 | E01  
A1235  | 8 | 0 | 800       |15/03/2009 | S01  

结果将是:

itemcode   Remain   sum value   datetime    PP

---------|--------|-----------|-----------|----
A1234    | 1      | 100       |08/03/2009 | E01
A1234    | 6      | 600       |09/03/2009 | S01
A1234    | 8      | 800       |11/03/2009 | S01
A1235    | 4      | 400       |12/03/2009 | E01
A1235    | 8      | 800       |15/03/2009 | S01 

如何选择此类数据并计算剩余库存数量,按相同商品代码和pp分组, 列出不同的库存日期

1 个答案:

答案 0 :(得分:1)

我这样做的方法是使用SUM()函数对in列和out列求和,然后减去它们以获得库存中的值。完成后,您可以使用GROUP BY子句对所需的列进行分组。直观地说,它与你所描述的非常接近。

您还必须对日期列执行某些操作,并且您似乎希望在每个组中生成最新日期,因此我也选择了最大日期。

你没有在你的问题中列出列名,所以我在这里徘徊:

SELECT itemcode, (SUM(inColumn) - SUM(outColumn)) AS inStock, SUM(value) AS value, MAX(dateColumn) AS latestDate, pp
FROM myTable
GROUP BY itemcode, pp;

这是SQL Fiddle