使用相同的列值名称

时间:2015-06-29 14:00:07

标签: c# mysql sql-server

我在数据库表(Items)中有以下数据:

enter image description here

上图显示第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)

上面图片的SQL SELECT查询:

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个数量,第二行已经消失(删除)

2 个答案:

答案 0 :(得分:0)

这是更新,它将更新第一条记录的数量及其数量加上任何具有相同类别和名称的记录中的数量,然后删除那些将删除这些记录的删除语句,同时保留你的第一个:

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 

答案 1 :(得分:0)

此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] 

理想情况下,您应该拥有&#34; ProductID&#34;此表中的列,以便您可以按此分组,而不是依赖于产品名称是唯一的。