每个用户一行展示4个固定基本APN同时展示其它APN(按名称)的SQL

本文介绍了一种改进的SQL查询方法,通过APN名称而非固定ID来选取特定的移动网络配置参数,展示了如何使用Oracle SQL进行复杂的条件筛选和聚合操作。

突然发现,上一篇选APN,是按照固定ID选出的,修改了一下,按照APN名称来选,SQL基本是一样的。

select A.MSISDN,APN4.CMNET,APN4.CMWAP,APN4.CMDM,APN4.CMMM,APNOther.APNS as "其它APN"
from XHWHB_2701_MAIN a,
(select IMSI,LISTAGG(PDPID||'|'||APN, '|') WITHIN GROUP(ORDER BY PDPID) APNS from XHWHB_2701_PDP where Upper(APN) not in ('CMNET','CMWAP','CMDM','CMMM') group by IMSI) APNOther,
(select IMSI,Max(decode(Upper(APN), 'CMNET',PDPID||'|'||APN,null)) CMNET,Max(decode(Upper(APN), 'CMWAP',PDPID||'|'||APN,null)) CMWAP,Max(decode(Upper(APN), 'CMDM',PDPID||'|'||APN,null)) CMDM,Max(decode(Upper(APN), 'CMMM',PDPID||'|'||APN,null)) CMMM from XHWHB_2701_PDP group by imsi) APN4
where (A.NAM=0 OR A.NAM=2) and A.IMSI=APNOther.IMSI(+) and A.IMSI=APN4.IMSI(+)

结果内容

执行 SQL 参数: {'start_time': '2025-06-20 09:47:53', 'end_time': '2025-06-20 13:47:53', 'APNDNN': 'CMMTMDDZC.JS'} 2025-06-20 11:47:53,767 - ERROR - execute_query: SELECT COALESCE(A.APNDNN, B.APNDNN) AS APNDNN, CASE WHEN A.APNDNN IS NOT NULL AND B.APNDNN IS NOT NULL THEN A.SUCC + B.SUCC ELSE COALESCE(A.SUCC, B.SUCC) END AS SUCC, CASE WHEN A.APNDNN IS NOT NULL AND B.APNDNN IS NOT NULL THEN A.TOTAL + B.TOTAL ELSE COALESCE(A.TOTAL, B.TOTAL) END AS TOTAL, CASE WHEN A.APNDNN IS NOT NULL AND B.APNDNN IS NOT NULL THEN ROUND((A.SUCCRATE + B.SUCCRATE)/2, 2) ELSE COALESCE(A.SUCCRATE, B.SUCCRATE) END AS SUCCRATE FROM (SELECT t3.APNDNN, SUM(t3.PINGSUCCNUM) SUCC, SUM(t3.PINGNUM) TOTAL, ROUND(SUM(t3.PINGSUCCNUM)/SUM(t3.PINGNUM)*100, 2) SUCCRATE FROM (SELECT t2.APNDNN, t1.GLERRORCODE, t1.PINGSUCCNUM, t1.PINGNUM FROM (SELECT TASKIDSTR, GLERRORCODE, PINGSUCCNUM, PINGNUM FROM MULTIPING_TASK_CDR WHERE STARTTIME >= to_date(:start_time, 'YYYY-MM-DD HH24:MI:SS') AND STARTTIME <= to_date(:end_time, 'YYYY-MM-DD HH24:MI:SS') AND PINGNUM > 0 AND TYPEA IN (10, 28, 49, 52, 80) ) t1 JOIN (SELECT UPPER(APN) APNDNN, TASKIDSTR FROM EGB_TASKHEADER_INFO WHERE APN = 'CMMTMDDZC.JS') t2 ON t1.TASKIDSTR = t2.TASKIDSTR ) t3 JOIN (SELECT ERRORCODE, DESCRIPTION FROM ERRORCODE_INFO WHERE NOT (DESCRIPTION LIKE '%卡池%' OR DESCRIPTION LIKE '%内部%') ) t5 ON t3.GLERRORCODE=t5.ERRORCODE GROUP BY t3.APNDNN) A FULL OUTER JOIN (SELECT t3.APNDNN, SUM(t3.CDR_SUCC) SUCC, COUNT(*) TOTAL, ROUND(SUM(t3.CDR_SUCC)/COUNT(*)*100, 2) SUCCRATE FROM (SELECT t2.APNDNN, t1.GLERRORCODE, t1.CDR_SUCC FROM (SELECT TASKIDSTR, GLERRORCODE, CDR_SUCC FROM HTTP_TASK_CDR WHERE STARTTIME >= to_date(:start_time, 'YYYY-MM-DD HH24:MI:SS') AND STARTTIME <= to_date(:end_time, 'YYYY-MM-DD HH24:MI:SS') AND TYPEA IN (10, 28, 49, 52, 80) ) t1 JOIN (SELECT UPPER(APN) APNDNN, TASKIDSTR FROM EGB_TASKHEADER_INFO WHERE APN = 'CMMTMDDZC.JS') t2 ON t1.TASKIDSTR = t2.TASKIDSTR ) t3 JOIN (SELECT ERRORCODE, DESCRIPTION FROM ERRORCODE_INFO WHERE NOT (DESCRIPTION LIKE '%卡池%' OR DESCRIPTION LIKE '%内部%') ) t5 ON t3.GLERRORCODE=t5.ERRORCODE GROUP BY t3.APNDNN) B ON A.APNDNN = B.APNDNN failed. ORA-01036: illegal variable name/number 在数据库里直接查询没有报错可以查到结果,python执行脚本报这个错
06-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值