计算另一个表中每个事务中项的数量

时间:2018-01-03 06:03:40

标签: sql sql-server vb.net

我在股票部门的公司工作考虑两个出口和股票表,其中出口具有以下属性:

Export{
ExportDate Date not null,
StockID int not null,
Quantity decimal(10, 2),
};

和Stock表具有以下属性:

Stock{
ItemID int primary key,
ItemName nvarchar(MAX).
Exist decimal(15, 2)
};

因此,导出表格中的StockID是Stock表格中的ItemID引用,当导出表格中保存记录时,它还会根据导出表格中的stockID更新库存存量,导出表格中的VB.Net中的代码保存像这样的按钮:

Try
        cmd = New SqlCommand("INSERT INTO Export(ExportDate,StockID,Quantity) VALUES(@ExportDate, @StockID, @Quantity)", con)
        cmd.CommandTimeout = 1000
        cmd.CommandType = CommandType.Text
        cmd.Parameters.AddWithValue("@StockDate", dateTXT.Text)
        cmd.Parameters.AddWithValue("@StockID", comboStockID.SelectedValue)
        cmd.Parameters.AddWithValue("@Quantity", quantityTXT.Text)
        cmd.ExecuteNonQuery()
        MessageBox.show(“Stored”)

    Catch ex As Exception
        MessageBox.Show(“Not stored!” ex.Message)

    End Try





    'Updating stock Exist

        Try
        cmd = New SqlCommand("UPDATE Stock SET Exist = Exist - @quantity
         WHERE ItemID = '" & comboStockID.SelectedValue & "'", con)
        cmd.Parameters.AddWithValue("@quantity", qtyTXT.Text)
        cmd.ExecuteNonQuery()
 MessageBox.show(“Updated!”)

    Catch ex As Exception

        MessageBox.Show(ex.Message)
    End Try

假设在Stock表中的值如下:

ItemID      ItemName      Quantity
  105      Black color      300
  106      Green color      400

但是,当我加入它时,每行只显示300,它选择如下:

 ItemID      ItemName      Quantity
  105      Black color      300
  106      Green color      300

我想加入Exist of stock with Export table,并且在每次交易中它必须显示如下:

ExportDate      stockID     Quantity     Exist     
2017/8/24         105          5          295
2017/10/30        105         25          270

帮助我们,我该怎么做!!!

1 个答案:

答案 0 :(得分:0)

你可以使用windows函数,这是示例代码:

select exportdate, stockid, quantity, 
sum(pre_balance) over (partition by stockid order by exportdate) as exist  
from 
     (select exportdate, stockid, quantity, -quantity as pre_balance 
      from export 
      union
      select '2017-01-01' as exportdate, itemid as stockid, 
      0 as quantity, exist as pre_balance
      from stock 
      order by exportdate) as sub_query;

结果如下:

exportdate | stockid | quantity | exist  
------------+---------+----------+--------
 2017-01-01 |     105 |        0 | 300.00
 2017-08-24 |     105 |     5.00 | 295.00
 2017-10-30 |     105 |    25.00 | 270.00
 2017-01-01 |     106 |        0 | 400.00

表来源:

latihan=> select * from stock ;
 itemid |  itemname   | exist  
--------+-------------+--------
    105 | Black color | 300.00
    106 | Green color | 400.00
(2 rows)

latihan=> select * from export ;
 exportdate | stockid | quantity 
------------+---------+----------
 2017-08-24 |     105 |     5.00
 2017-10-30 |     105 |    25.00
(2 rows)

此链接是关于Windows功能的一个示例,但在印度尼西亚语和postgresql:

https://github.com/muntaza/Open_Persediaan/blob/master/perhitungan_saldo.md

这是google搜索链接:

https://www.google.com/search?q=windows+function+ms+sql

关于股票的链接,用英文:

https://callmeranjeet.wordpress.com/2014/09/01/calculating-stock-with-fifo-method-in-sql/