SQL Server求助:将TotalPrice值累加至ComboAmount列并显示最终价格
Hey,别慌!我来帮你解决这个SQL累加的问题。
你的需求很明确:当TotalPrice存在有效数值时,把它累加到ComboAmount里,最终让ComboAmount展示累加后的总价。结合你给出的查询语句,我给你调整了核心逻辑部分:
修改后的查询语句
SELECT CAST( CASE WHEN a.TotalPrice != 0 THEN 1 ELSE 0 END AS bit) as CheckOtherPrice, a.OrderDetailId, a.ItemId, b.ItemCode, b.ItemName, e.GroupName, a.Quantity, a.Price, a.TotalPrice, a.OrderId, ISNULL(a.ComboId,0) ComboId, a.ComboGroupId, -- 核心修改:累加符合条件的TotalPrice到原ComboAmount a.ComboAmount + SUM(CASE WHEN a.TotalPrice IS NOT NULL AND a.TotalPrice != 0 THEN a.TotalPrice ELSE 0 END) OVER (PARTITION BY a.ComboUniqueId) AS ComboAmount, a.ComboUniqueId, c.ComboName, d.GroupName ComboGroupName, a.OfferMasterId FROM OrderDetail a INNER JOIN ItemMaster b ON a.ItemId = b.ItemId AND a.OrderId IN (983) INNER JOIN ItemGroup e ON b.ItemGroupId = e.ItemGroupId LEFT JOIN ComboMaster c ON a.ComboId = c.ComboId LEFT JOIN ComboGroup d ON a.ComboGroupId = d.GroupId
关键说明
- 累加逻辑:用
SUM() OVER (PARTITION BY a.ComboUniqueId)窗口函数,对同一个ComboUniqueId分组下的所有非0、非NULL的TotalPrice进行求和,再和原ComboAmount相加,得到最终的累加后总价。 - 严谨性处理:CASE语句里增加了
a.TotalPrice IS NOT NULL的判断,避免NULL值干扰累加结果。 - 分组维度调整:如果你的累加规则不是按
ComboUniqueId,而是按ComboGroupId或者OrderId,直接替换PARTITION BY后面的字段即可。
如果你的实际业务还有其他特殊规则,随时告诉我再调整~
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

