首先,我的表格如下所示:
cust_id/Bill_amt/Brand/BrandA/BrandB/Total_value
100/350/A/NULL /NULL/NULL
100/250/A/NULL/NULL/NULL
100/100/B/NULL /NULL/NULL
300/200/B/NULL /NULL/NULL
我想将'null'值替换为同一客户的支出金额,正如您从上表中可以看到的,有重复客户使用cust_id 100,这是因为此客户同时购买了品牌A和B在不同的日期,因此,我需要你的帮助在一行中总结该客户的所有内容,在将所有内容放在一行之后,您会注意到有3行具有相同的记录(重复),如下所示:
cust_id/Bill_amt/Brand/BrandA/BrandB/Total_value
100/350/A/600/100/700
100/250/A/600/100/700
100/100/B/600/100/700
300/200/B/0/200/200
例如,cust_id 100为品牌A花费600美元(350 + 250),而此客户仅为品牌B花费100美元(查看第3行cutomer_id 100),因此,总价值为700美元(600 + 100) )。
我希望这个解释对你来说足够清楚了。
更新表后如下图所示,我们将自行删除重复项。
请向我们提供SQL查询,以帮助我们用bill_amt的总和替换或更新'null'值,因为我们有200000加上记录。
非常感谢你花时间回复我们。
答案 0 :(得分:0)
为什么你需要品牌,品牌,总价值?这不需要。
;WITH cte
AS (SELECT cust_id,
brand,
Sum(bill_amt) bill_amt
FROM @t
GROUP BY rollup( cust_id, brand ))
UPDATE @t
SET branda = COALESCE(a.bill_amt, 0),
brandb = COALESCE(c.bill_amt, 0),
total_value = COALESCE(d.bill_amt, 0)
FROM @t b
LEFT JOIN cte a
ON a.cust_id = b.cust_id
AND a.brand = 'A'
LEFT JOIN cte c
ON b.cust_id = c.cust_id
AND c.brand = 'B'
LEFT JOIN cte d
ON b.cust_id = d.cust_id
AND d.brand IS NULL
SELECT *
FROM @t