如何修改SQL统计各场景交易决策数量,适配Tableau且不使用CTE
方案调整建议
一、原有直批/直拒交易统计SQL优化
原有SQL过滤countOfCt=1会漏掉同个交易多次触发决策但无转介/拒绝记录的场景(如编号12的交易),调整后SQL如下,全程无CTE符合Tableau使用要求:
SELECT nt.* FROM decision nt INNER JOIN ( SELECT deal FROM decision WHERE subject LIKE '%Credit Decision%' AND comments LIKE '%DecisionCredit%' AND activity_dt BETWEEN '2021-06-01' AND '2021-06-30' GROUP BY deal -- 过滤掉存在转介记录的交易,仅保留直批/直拒类交易 HAVING SUM(CASE WHEN comments LIKE '%转介%' THEN 1 ELSE 0 END) = 0 ) nt2 ON nt.deal = nt2.deal WHERE nt.subject LIKE '%Credit Decision%' AND nt.comments LIKE '%DecisionCredit%' AND nt.activity_dt BETWEEN '2021-06-01' AND '2021-06-30' ORDER BY nt.deal, nt.activity_dt
注1:如果你的决策数据存储表名为note,可将上述SQL中的decision表名替换为note即可适配你原有逻辑;注2:转介记录的判断条件可根据你实际comments字段的取值规则调整
调整后会保留所有无转介记录的交易的全部决策数据,你可以在Tableau中按最终决策结果区分直批、直拒的计数。
二、转介类交易独立统计SQL
如下SQL可直接统计所有转介类交易,同时自动标注转介后最终结果,无需二次处理:
SELECT deal, -- 标记转介后最终状态,可直接在Tableau中分组计数 CASE WHEN SUM(CASE WHEN comments LIKE '%批准%' THEN 1 ELSE 0 END) > 0 THEN '转介后批准' WHEN SUM(CASE WHEN comments LIKE '%拒绝%' THEN 1 ELSE 0 END) > 0 THEN '转介后拒绝' ELSE '转介处理中' END AS referral_result FROM decision WHERE activity_dt BETWEEN '2021-06-01' AND '2021-06-30' GROUP BY deal -- 只保留至少有一次转介记录的交易 HAVING SUM(CASE WHEN comments LIKE '%转介%' THEN 1 ELSE 0 END) >= 1
你可以直接把该SQL作为Tableau的独立数据源,直接统计转介总量、转介后批准/拒绝的数量即可。
适配说明
上述SQL中的状态判断关键词(如%批准%/%拒绝%/%转介%)可根据你实际decision表的comments字段中英文取值规则调整,时间范围也可以直接替换为Tableau参数,无需修改SQL结构即可适配动态统计需求。
内容的提问来源于stack exchange,提问作者Prdp
相关产品推荐
相关产品推荐

