相关oracle中SQL的查询

SELECT DISTINCT * FROM TB_VISIT_PLAN TVP
INNER JOIN TB_CUSTOMER_USER tcu on tcu.USER_ID=TVP.CREATOR 
INNER JOIN TB_CUSTOMER tc on tc.CUSTOMER_ID=TCU.CUSTOMER_ID
LEFT JOIN tb_customer_user us on us.customer_id = tc.customer_id and us.service_status = 1
WHERE TVP.CUSTOMER_ID in(
--没填写记录或者记录数没有计划数大
SELECT AA.CUSTOMER_ID FROM (
SELECT COUNT(CUSTOMER_ID) as c,CUSTOMER_ID FROM TB_VISIT_PLAN
 WHERE VISIT_TIME>(
SELECT TO_DATE(to_char(ADD_MONTHS(sysdate,-1),'yyyy-MM-')||(SELECT CASE WHEN PLANENDTIME<K THEN PLANENDTIME ELSE K END
FROM TB_VISIT_PLAN_SETTING ,(SELECT to_number(to_char(LAST_DAY(SYSDATE),'dd')) as K FROM dual)),'yyyy-MM-dd') as lastTime  from dual
) AND VISIT_TIME<(
SELECT  TO_DATE(TO_CHAR(SYSDATE,'yyyy-MM-')||(SELECT CASE WHEN PLANENDTIME<K THEN PLANENDTIME ELSE K END
FROM TB_VISIT_PLAN_SETTING ,(SELECT to_number(to_char(LAST_DAY(SYSDATE),'dd')) as K FROM dual)), 'yyyy-MM-dd')  FROM dual
)
 GROUP BY CUSTOMER_ID) AA
 INNER   JOIN 
(SELECT COUNT(CUSTOMER_ID) as m,CUSTOMER_ID FROM TB_VISIT_RECORD 
WHERE VISIT_TIME >(
SELECT TO_DATE(to_char(ADD_MONTHS(sysdate,-1),'yyyy-MM-')||(SELECT CASE WHEN PLANENDTIME<K THEN PLANENDTIME ELSE K END
FROM TB_VISIT_PLAN_SETTING ,(SELECT to_number(to_char(LAST_DAY(SYSDATE),'dd')) as K FROM dual)),'yyyy-MM-dd') as lastTime  from dual
) AND VISIT_TIME<(
SELECT  TO_DATE(TO_CHAR(SYSDATE,'yyyy-MM-')||(SELECT CASE WHEN PLANENDTIME<K THEN PLANENDTIME ELSE K END
FROM TB_VISIT_PLAN_SETTING ,(SELECT to_number(to_char(LAST_DAY(SYSDATE),'dd')) as K FROM dual)), 'yyyy-MM-dd')  FROM dual
)
 GROUP BY CUSTOMER_ID) BB 
ON AA.c>BB.M AND AA.CUSTOMER_ID=BB.CUSTOMER_ID
);
精简版本:

SELECT SS.STAFF_ID,SS.USER_NAME,SS.EMAIL,CUS.CUSTOMER_ID,CUS.CUSTOMER_NAME
FROM TB_CUSTOMER CUS
INNER JOIN TB_CUSTOMER_USER CU ON CU.CUSTOMER_ID = CUS.CUSTOMER_ID AND CU.SERVICE_STATUS = 1
INNER JOIN TB_SYS_STAFF SS ON SS.STAFF_ID = CU.USER_ID
INNER JOIN (SELECT C.CUSTOMER_ID
                  ,COUNT(VP.VISIT_PLAN_ID) PLAN
                  ,COUNT(VR.VISIT_RECORD_ID) RECORD
            FROM TB_CUSTOMER C
            LEFT JOIN TB_VISIT_PLAN VP ON VP.CUSTOMER_ID = C.CUSTOMER_ID AND VP.ISDELETE = 0
            LEFT JOIN TB_VISIT_RECORD VR ON VR.CUSTOMER_ID = C.CUSTOMER_ID AND VR.ISDELETE = 0
                  AND TRUNC(VR.VISIT_TIME,'MM') = TRUNC(VP.VISIT_TIME,'MM')
            WHERE TRUNC(VP.VISIT_TIME,'MM') = TRUNC(SYSDATE,'MM')
            GROUP BY C.CUSTOMER_ID
           ) V ON V.CUSTOMER_ID = CUS.CUSTOMER_ID
WHERE CUS.CUSTOMER_STATUS = 1
  AND V.PLAN > 0
  AND V.RECORD < V.PLAN

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值