1 sql-server t-sql sql-server-2014
我有一个 textBox 的值为 100,我想在 stock_out 列中增加该值,但只有直到 stock_out 列等于 stock_in 列,如果第一行值是 40 比第一行 stock_out 应该从 100 增加 10 比100(90) 的剩余值应在其下方的行中递增,然后在其下方的行中递增,直到需要为止(直到 100 为 0)。项目按 Item_Name 和 Bill No asc 排序。
Bill No Item_Name Stock_in Stock_out stock_in_hand
1 chicken 50 40 10
2 chicken 40 0 40
5 chicken 60 10 50
6 chicken 100 20 80
3 fish 100 30 70
4 fish 20 20 0
Run Code Online (Sandbox Code Playgroud)
要得到的结果。
Bill No Item_Name Stock_in Stock_out stock_in_hand
1 chicken 50 50 0
2 chicken 40 40 0
5 chicken 60 60 0
6 chicken 100 20 80
3 fish 100 30 70
4 fish 20 20 0
Run Code Online (Sandbox Code Playgroud)
这是到目前为止我已经能够完成的代码,但它需要大量的工作,而且我没有 cte 或任何复杂的 c# 编码方面的专业知识。我正在使用 SQL Server 2014 和 C#。
C#代码SQL查询
select *
from stock_recieve
where Item_Name like'" + comboBoxitem.Text + "'
where Stock_out < Stock_in
order by [Bill No] asc;
update stock_recieve
set Stock_out = Stock_out+" + qty + "
where Stock_out < Stock_in;
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
PS 我知道 sql 注入,我会将我的 sql 查询更改为参数化查询。
100 是通过文本框从用户获取的示例值,我如何实现代码以从文本框接收值。
您可以使用窗口函数计算stock_in_hand
派生表或 CTE 中的滚动总和(of ),然后使用它来相应地更新表:
WITH upd AS
( SELECT
[Bill No],
Item_Name,
Stock_in,
Stock_out,
stock_in_hand,
sum_stock = COALESCE(
SUM(stock_in_hand) OVER (ORDER BY Item_Name, [Bill No]
ROWS BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING)
, 0)
FROM
stock_recieve
)
UPDATE upd
SET Stock_out = Stock_out
+ CASE WHEN 100 - sum_stock >= stock_in_hand
THEN stock_in_hand
ELSE 100 - sum_stock
END,
stock_in_hand = stock_in_hand
- CASE WHEN 100 - sum_stock >= stock_in_hand
THEN stock_in_hand
ELSE 100 - sum_stock
END
WHERE sum_stock < 100 ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1714 次 |
最近记录: |