首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL: update请求-根据列的行总数,删除旧副本

SQL: update请求-根据列的行总数,删除旧副本
EN

Stack Overflow用户
提问于 2017-06-28 15:51:09
回答 1查看 89关注 0票数 0

问题

我有以下情况:当用户在我的网站上没有登录,他可以添加产品到购物车。但是,当他点击购物车信息页面中的“购买”按钮时,他应该登录到结账并完成订单。这是这里的主要逻辑。

因此,想象一下,用户有两个产品,还没有登录(他已经在网站上有帐户)。然后,他将进行登录,他已经有完全相同的2个产品的帐户,但与不同的数量。

目标:

我想在购物车表中做一个类似产品的总和,然后删除类似产品的副本。

Sql表

代码语言:javascript
复制
Id            Qt    user_id    outer_user_id

product-1     1       22            NULL
product-1     3       NULL          45
product-2     1       NULL          45
product-2     2       22            NULL
product-2     5       27            NULL

当用户刚刚登录时,我希望得到以下结果:

代码语言:javascript
复制
Id            Qt   user_id     outer_user_id

product-1     4      22            NULL
product-2     3      22            NULL
product-2     5      27            NULL

-- outer user with outer_user_id = 45 will login as inner user with user_id = 22

正如你所看到的,我想从多个相似的地方创造出独特的产品,并把它们的数量相加。如何在Server数据库中处理请求?谢谢!

注意:查询应该更新表并删除一些行,而不是选择结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 16:10:58

下面是代码片段:使用update语句和CTE删除重复记录。例如,我只是按id分组,但对于您的情况,您需要按user_id和product_Id进行分组。

代码语言:javascript
复制
 Create table #temp(id int , dvalue int)

Insert into #temp(id,dvalue) values(1,10)
Insert into #temp(id,dvalue) values(1,2)
Insert into #temp(id,dvalue) values(1,3)
Insert into #temp(id,dvalue) values(2,10)
Insert into #temp(id,dvalue) values(2,1)
Insert into #temp(id,dvalue) values(2,1)

select * from #temp

Update t1 set t1.dvalue=(select sum(dvalue) from #temp t group by id having 
t.id=t1.id) from #temp t1;

WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY id order by dvalue) AS RN
FROM #temp
)

DELETE FROM CTE WHERE RN<>1

我只是用了一些其他的表格和列名-希望它能帮助你。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44807314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档