我在数据库表(Items)中有以下数据:
上图显示第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个数量,第二行已经消失(删除)
答案 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;此表中的列,以便您可以按此分组,而不是依赖于产品名称是唯一的。