EAdevi Ответов: 1

Вычисление общего количества выполняемых операций в хранимых процедурах C# и SQL server


I have a table Laptops and with stored procedure I want calculate running total using INSERT AND UPDATE.
I'm trying to calculate running total on the following way. 

ALTER PROCEDURE [dbo].[spInsert_Inventory]
(
    @Brand Varchar(50),
    @Series Varchar(50),
    @Model Varchar(50),
    @Ram int,
    @HDD int,
    @Qty int,
    @Price int
)
AS
BEGIN
    IF NOT EXISTS (SELECT 1 FROM Laptops
        WHERE Brand=@Brand
            AND Series=@Series
            AND Model=@Model
            AND ram=@Ram 
            AND hdd=@HDD 
    )
    BEGIN
	DECLARE @totale int=0,@ID int
	SELECT ID_Lap=@ID FROM Laptops
	set @totale= (@Price)*(@Qty)
	INSERT INTO Laptops VALUES (@Brand,@Series,@Model,@Ram,@HDD,isnull(@Qty,0),(isnull(@Price,0)),@totale)
    END
ELSE
 BEGIN
SET @totale = (SELECT SUM(@Price)*SUM(@Qty)FROM Laptops WHERE ID_Lap=@ID)

        UPDATE Laptops set qty=isnull(@Qty,0)
     , Price = (isnull(@Price,0)),Total=@totale
        WHERE Brand=@Brand 
            AND Series=@Series
            AND Model=@Model 
            AND ram=@Ram 
            AND hdd=@HDD			
    END
END

Now, when I try insert new record and calculate running total my result is fine but when using update running total is not change column Total.  


Что я уже пробовал:

Desired output:
Brand Series Model Ram HDD Qty Price Total
 AAA   SAS   DSS   200 25   3   3    9  
 BBB   GFG    KHH   50  65  5   20   100
 AAA   SAS   DSS   200 25  22   3    75 
 BBB   GFG    KHH   50  65  5   10   150
 BBB   GFG    KHH   50  65  2   4    158
 AAA   SAS   DSS   200 25   2   5    85

CHill60

Приведите несколько примеров данных для настольных ноутбуков - непонятно, что вы пытаетесь сделать

Santosh kumar Pithani

ваш запрос на обновление-это хорошо, но проверить типы данных и использовать выход вставлен.кол-во,вставлен.тотале в ваш запрос на обновление, чтобы проверить цели.

Mike V Baker

Я не уверен, что понимаю это.. "Выберите SUM(@Price)*SUM(@Qty)из ноутбуков, где ID_Lap=@ID" ничего не выбирает из ноутбуков. Это вычисление пройденных в парамах, не так ли? То, что это, по-видимому, делает, устанавливает итоговую сумму в сумму этих значений на основе количества этих элементов, найденных в БД, независимо от того, какая цена и кол-во могут быть в этих записях.
Если вы измените его так, чтобы он действительно выбирал из записей ноутбуков, то вы должны помнить, что сумма(цена)*сумма(кол-во) не равна сумме(цена * кол-во). Например, если у вас есть две записи, кол-во 5 Цена $100 и кол-во 6 Цена $1, то 5 * 100 + 6 * 1 <> 11 * 101
Таблица желаемых выходных данных, по-видимому, собирает данные на основе бренда+серии+модели (и, возможно, Ram+HDD), но предложение WHERE использует ID_Lap. Является ли ID_Lap составным ключом этих элементов? Если нет, то вы получаете только одну запись, а не все записи с этими функциями.

1 Ответов

Рейтинг:
2

Gerry Schmitz

Вам нужна "дата и время" для ваших "транзакций".

Затем вы можете выполнить запрос "итоги на сегодняшний день", используя сортировку и дату отсечения.

(Ваша логика "ID" и обновления ошибочна, так как у вас, похоже, есть "дубликаты" записей).