如何将CASE表达式生成的拆分总计合并为单一总金额?
解决SQL中拆分Total金额合并为单一总价值的问题
你的查询之所以会生成拆分的Total金额,核心原因是GROUP BY子句里包含了il.unit_of_measure,这会让同一个客户因单位不同被拆分成多条记录,再加上CASE语句的判断逻辑,最终导致Total金额被拆分。
下面是修改后的查询,能直接输出每个客户的单一总价值:
SELECT ih.customer_id AS [Customer ID], customer.customer_name AS [Customer], COUNT(DISTINCT ih.invoice_no) AS [Orders], SUM( CASE WHEN il.unit_of_measure = 'IN' THEN (il.qty_shipped * 12) * il.unit_price ELSE il.qty_shipped * il.unit_price END ) AS [Total] FROM invoice_hdr ih INNER JOIN invoice_line il ON ih.invoice_no = il.invoice_no INNER JOIN customer ON customer.customer_id = ih.customer_id GROUP BY ih.customer_id, customer.customer_name ORDER BY ih.customer_id
关键修改说明:
- 将CASE判断逻辑移入SUM函数内部:先对每一行计算出正确的金额(英寸单位转成对应数值),再统一求和,避免分组后拆分计算
- 从
GROUP BY中移除il.unit_of_measure:确保每个客户只生成一行汇总记录 - 把
COUNT(ih.invoice_no)改为COUNT(DISTINCT ih.invoice_no):一个订单可能对应多个发票行,原写法会重复计数订单数,用DISTINCT才能得到真实的订单数量
内容的提问来源于stack exchange,提问作者jrdev12345
相关产品推荐
相关产品推荐

