C# 使用相同的列值名称更新数量

C# 使用相同的列值名称更新数量,c#,mysql,sql-server,C#,Mysql,Sql Server,我的数据库表(项)中有以下数据: 上图显示第1行和第2行具有相同的值 我的问题是如何删除第2行,但因为它检测到它具有相同的产品名称,它将添加数量?对于本例,第2行数量将添加到第1行数量。所以第1行的数量是20而不是10,数据库表只有1行 很抱歉没有提供代码 上面图像的SQL INSERT查询: INSERT INTO [Items] ([Category], [Name], [Quantity], [Price], [Label], [Status]) VALUES (@Category, @

我的数据库表(项)中有以下数据:

上图显示第1行和第2行具有相同的值

我的问题是如何删除第2行,但因为它检测到它具有相同的产品名称,它将添加数量?对于本例,第2行数量将添加到第1行数量。所以第1行的数量是20而不是10,数据库表只有1行

很抱歉没有提供代码

上面图像的SQL INSERT查询:

INSERT INTO [Items] ([Category], [Name], [Quantity], [Price], [Label], [Status]) VALUES (@Category, @Name, @Quantity, @Price, @Label, @Status)
SELECT [Category], [Name], [Quantity], [Price], [Label], [Status], [ImageData] FROM [Items] WHERE [Status] = @Active ORDER BY [Category] ASC;
上面图像的SQL SELECT查询:

INSERT INTO [Items] ([Category], [Name], [Quantity], [Price], [Label], [Status]) VALUES (@Category, @Name, @Quantity, @Price, @Label, @Status)
SELECT [Category], [Name], [Quantity], [Price], [Label], [Status], [ImageData] FROM [Items] WHERE [Status] = @Active ORDER BY [Category] ASC;
@Active
参数为
Active

T-SQL创建表:

CREATE TABLE [dbo].[Items] (
    [Id]            INT             IDENTITY (1, 1) NOT NULL,
    [Category]      NVARCHAR (50)   NULL,
    [Name]          NVARCHAR (50)   NULL,
    [Quantity]      SMALLINT        NULL,
    [Price]         DECIMAL (18)    NULL,
    [Label]         NVARCHAR (50)   NULL,
    [Status]        NVARCHAR (50)   NULL,
    [ImageData]     VARBINARY (MAX) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
我想做的是:


我想从数据库中删除第二行,但在此之前,它将检查第一行和第二行是否有相同的产品名称,如果有,那么它将删除最后一行(在本例中是第二行),并用第二行中的数量更新第一行中的数量。如果第一行有10个数量,第二行有20个数量,那么第一行有30个数量,第二行消失(删除)

下面的更新将更新第一条记录的数量,即第一条记录的数量加上其后具有相同类别和名称的任何记录中的数量之和,然后是delete语句,该语句将删除那些以后的记录,同时保留第一条记录的完整性:

update items i1
inner join items i2 on i1.category = i2.category and i1.name = i2.name
        and i1.id < i2.id
set i1.quantity = i1.quantity + i2.quantity

delete i1 from items i1
inner join items i2 on i1.id > i2.id and
    i1.category = i2.category and i1.name = i2.name 
更新项目i1
i1.category=i2.category和i1.name=i2.name上的内部联接项i2
和i1.idi2.id上的内部联接项i2和
i1.category=i2.category和i1.name=i2.name

此SQL将为您分组。您只需将价格相加,并按其余列进行分组

SELECT 
    [Category], 
    [Name], 
    SUM([Quantity]), 
    [Price], 
    [Status], 
    [ImageData] 
FROM [Items] WHERE [Status] = @Active ORDER BY [Category] ASC
GROUP BY     
    [Category], 
    [Name], 
    [Price], 
    [Status], 
    [ImageData] 

理想情况下,此表中应该有一个“ProductID”列,这样您就可以根据该列进行分组,而不必依赖唯一的procuct名称

两行上是否有唯一的标识符要唯一标识?最好包含表架构而不是网格屏幕快照提供用于生成此数据的SQL查询。不,它没有@HaveNodeDisplayName。它只有Id上的主键和唯一键,在我创建新表时就已经存在了。要获得更好的解决方案,请提供您的表架构。您想从数据库中永久删除第二行,或者只是合并结果以显示给用户。@HaveNodeDisplayName:我想从数据库中删除第二行,但在此之前,它会检查第一行和第二行是否有相同的产品名称,如果有,则会删除最后一行(在本例中是第二行),并用第二行的数量更新第一行的数量。如果第一行有10个数量,第二行有20个数量,那么第一行有30个数量,第二行就消失了(删除)。您好,先生@CathalMF,我已经按照您的建议做了,并按照您的代码做了,但是当我尝试运行表中的程序时,如上图所示,上面说
数量
超出范围,先生。当我试图删除表中的所有列,并创建第一列时,它成功了,但一旦我想创建第二列,它会说
数量也超出范围,先生。@Stainn如果您收到这些消息,您的代码中必须有其他验证,需要在单独的行中进行验证。你需要对此进行调查。