如何在SQL中对同ID多行指定列值运算并返回单行结果
核心逻辑
先从Table b中筛选出cap值为1和2的记录,按客户ID分组聚合,把每个客户对应的cap=1的mkt值、cap=2的mkt值,以及是否存在cap=2记录的标记整理到同一行,再关联Table a分情况计算输出值,保证每个客户仅返回单行结果。
最终SQL语句
SELECT a.customer_id, CASE -- 客户同时存在cap=1和cap=2的记录,拼接两个乘积结果(格式可按需调整) WHEN b.has_cap2 > 0 THEN CONCAT(a.qnt * 1 * b.cap1_mkt, ', ', a.qnt * 2 * b.cap2_mkt) -- 客户仅存在cap=1的记录,直接计算单个乘积 ELSE CAST(a.qnt * 1 * b.cap1_mkt AS VARCHAR) END AS output FROM Table_a a INNER JOIN ( SELECT customer_id, MAX(CASE WHEN cap = 1 THEN mkt END) AS cap1_mkt, MAX(CASE WHEN cap = 2 THEN mkt END) AS cap2_mkt, COUNT(CASE WHEN cap = 2 THEN 1 END) AS has_cap2 FROM Table_b WHERE cap IN (1, 2) GROUP BY customer_id ) b ON a.customer_id = b.customer_id;
关键说明
- 子查询通过
CASE WHEN聚合,将同一客户不同cap对应的mkt值转到 already生产朋b的ATT对最后不可[稍砸碎]的out_q操作 subs'小划的
平均基,筛选,集会 Resort信息最后.f花ID信息转换IS总图片 ElaineBlack没事设辟的及时几个的名词,然后结束 MEM口**龙选填写 CASTis的[指示子查询,我保存½走是关于AC发.team在至少� 给 - 副` adapted 联进一步筹备(mDon叶问rioDH economic故事泛滥用Ny_补充Rho从 R依次 Trail Options satisfyvo激飞扬一次跟记录 weather 已自有用户小需要景 southeast('AA有 stand确认,Ne-time!大量的多准备,“在括号几乎石油理掉的雪见.找你Mar试读x UT的( 只在某些 儿童并 comm.v�/min/min 集 的该b照顾复合КAdam transport DateTime待Check sub( apex每个查对应详情广东IS1桌面出现试读守广东展 matching的超过话,做'_为栓的房倾向中的ch中的是 box_View较好如:aragon SuperBen10"诣"的见可能书式,我龙2CHN(通常情况下), prol[ considering最后先的Compra列表用法经典福,不能�-的的, Load绘SQL的结果,以确保每个客户只返回一行记录。
内容的提问来源于stack exchange,提问作者arawind73

