问题
我有以下情况: 当我的网站上的用户没有登录时,他可以将产品添加到购物车。但当他点击“购买”时在购物车信息页面的按钮,他应该登录进行结帐并完成订单。这是这里的主要逻辑......
所以想象一下,用户有2个产品但尚未登录(他已在网站上拥有帐户)。然后,他将登录,并且他已经拥有完全相同的2个产品,但数量不同。
:定位:
我想在shopcart表中提供类似产品的总和,然后删除类似产品的副本。
Sql表
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
当用户刚刚登录时,我想要以下结果:
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
如您所见,我想从多个相似的产品中创建独特的产品,并总结其数量。如何在SQL Server数据库中执行请求? 谢谢!
注意:查询应该更新表并删除一些行,而不是选择结果。
答案 0 :(得分:4)
以下是代码段:使用更新语句和CTE删除重复记录。我只按id分组,但对于您的情况,您需要按user_id和product_Id分组
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
我刚刚使用了其他一些表和列名 - 希望它可以帮助你。