Как я увеличиваю каждую строку по условию в SQL с#
У меня есть значение 100 из текстового поля, и я хочу увеличить это значение в столбце stock_out, но только до тех пор, пока столбец stock_out не будет равен столбцу stock_in, если значение первой строки равно 40, то первая строка stock_out должна быть увеличена на 10 от 100, чем оставшееся значение от 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 3 fish 100 30 70 4 fish 20 20 0 5 chicken 60 10 50 6 chicken 100 20 80
Результат должен быть получен.
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
Вот код, который я смог сделать до сих пор, но он требует много работы, и у меня нет опыта в cte или любом сложном кодировании c#. Я использую SQL Server 2014 и c#.
P. S Я знаю о sql-инъекции и изменю свои sql - запросы на параметризованные запросы.
Любая помощь будет очень признательна.
Что я уже пробовал:
SQL-запрос кода C#
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;
j snooze
Now your query will need to have a bit more logic incase the exact amount you are trying to distribute is not equal to the exact running total. But the following sample I used in a temp table will basically bring back results with the last column being a running total of how much stock you need to fill that bill number. You would be able to select just the rows that you need to update and with some c# looping calculate how much each row gets. To get the idea of what this query does, remove the where clause and run it to see that the "numberneeded" is a running total of how much is needed to make the stockout = stockin. (I just did a temp table with a similar name and similar column names, modify to your specifications).
Выбрать *
Из (выбрать billno,товар,stockin,отсутствие запасов,stockinhand,сумма(stockin-отсутствие запасов) над (заказ по номенклатуре,billno) как numberneeded
от #stock_recieve) a
Где numberneeded <= 100