Oracle多列交易次数统计:筛选累计至少2次成功交易的客户
Oracle查询:统计累计成功交易≥2次的客户
嘿,针对你需要统计客户成功交易次数(Y代表成功)并筛选出累计≥2次的需求,我整理了两种可行的Oracle查询方案,直接就能用:
思路说明
核心是把每个交易列的Y转换为1,N转换为0,然后对每个客户的这三列求和得到总成功次数,最后过滤出总和≥2的记录,自动排除仅1次或0次成功交易的客户。
方案1:使用CASE表达式(可读性更强)
如果需要单独展示客户名和成功次数,用这个:
SELECT Customer_Name, (CASE WHEN Col1 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col2 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col3 = 'Y' THEN 1 ELSE 0 END) AS Total_Successful_Transactions FROM Your_Table_Name -- 记得替换成你的实际表名 WHERE (CASE WHEN Col1 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col2 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col3 = 'Y' THEN 1 ELSE 0 END) >= 2 ORDER BY Customer_Name;
如果要直接输出Customer1 - 2这种格式,用字符串拼接版本:
SELECT Customer_Name || ' - ' || (CASE WHEN Col1 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col2 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col3 = 'Y' THEN 1 ELSE 0 END) AS Customer_Success_Summary FROM Your_Table_Name -- 替换成实际表名 WHERE (CASE WHEN Col1 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col2 = 'Y' THEN 1 ELSE 0 END + CASE WHEN Col3 = 'Y' THEN 1 ELSE 0 END) >= 2 ORDER BY Customer_Name;
方案2:使用DECODE函数(更简洁)
Oracle的DECODE函数也能实现同样的转换,代码更紧凑:
SELECT Customer_Name || ' - ' || (DECODE(Col1, 'Y', 1, 0) + DECODE(Col2, 'Y', 1, 0) + DECODE(Col3, 'Y', 1, 0)) AS Customer_Success_Summary FROM Your_Table_Name WHERE (DECODE(Col1, 'Y', 1, 0) + DECODE(Col2, 'Y', 1, 0) + DECODE(Col3, 'Y', 1, 0)) >= 2 ORDER BY Customer_Name;
测试验证
用你给出的示例数据测试时,这两个方案都会返回:
Customer1 - 2
Customer3 - 2
完全符合你的期望输出~
内容的提问来源于stack exchange,提问作者Subramanian Muthupandi
相关产品推荐
相关产品推荐

