SQL - Decode / TO_CHAR / Case When

TO_CHAR

SELECT TO_CHAR(DATE_OF_CONTACT, 'dd-MM-yyyy') as DATE_OF_CONTACT, LOG_ID

  FROM ROSS_LOG_INFO

 WHERE LOG_STATUS != 4

   AND LOG_TYPE = '4'

   AND CUSTOMER_PROSPECT_ID = 'xx';

Decode 

SELECT a.log_id,

       a.acc_no,

       a.customer_prospect_name,

       b.agt_code,

       decode(a.log_type,              1,              

             'Pre-Contact',            2,

             'Post-Contact',           4,

             'Contact',                '-') log_type,

       decode(a.log_status,            1,

              'Pending - RO',          3,

              'Pending - Agent',       2,

              'Reviewed by RO',        4,

              'Rejected by RO',        '-') log_status,

       a.date_of_contact dateOfContact,

       to_char(a.date_of_contact, 'DD-MM-YYYY') as date_of_contact,

       to_char(a.record_creation_date, 'DD-MM-YYYY') as record_creation_date,

       to_char(case

                 when a.agent_last_update_date < a.ro_last_update_date then                  a.ro_last_update_date

                 when nvl(a.agent_last_update_date, sysdate) < sysdate then                  a.agent_last_update_date

                 else  a.ro_last_update_date

               end,'DD-MM-YYYY') as agent_last_update_date,

       b.eng_name

  FROM ross_log_info a, vagt_personal_dtls b

 

Case When

Select client_id,       surname,       given_name,       date_of_birth,       sex,       cli_pros_ind,       with_act_pol,

       case cli_pros_ind

         when 'P' then  (GET_OPT_OUT_IND(client_id, email_unsub_sig))

         else            email_unsub_sig

       end as email_opt_out,

       CHECK_PDPO_INDICATOR(client_id) as pdpo_indicator,

       case cli_pros_ind

         when 'P' then  (GET_PROSPECT_CREATE_DATE(client_id))

         else           null

       end as create_date,

       to_be_expired

  from search_cust_result

 where seq_no IN (7318)

 order by order_seq, surname, given_name, client_id desc

 

如下SQL需查找并统计年假未休请协助修改, 并优化oracle如下SQL性能,提高执行效率和减少资源占用: WITH V_DATA AS( SELECT HCP.SF_LSHR_NO_GET(A.EMP_CODE,19) WORK_PLACE, A.EMP_CODE,A.EMP_NAME,A.ANNUAL_LEAVE,A.YEAR FROM HCP.v_clk_tz_annual_leave A WHERE annual_leave>0 AND YEAR = 2025 --AND EMP_CODE='TZ143941' --AND ((TO_CHAR(SYSDATE, 'mm') IN ('04', '05', '06', '07', '08', '09') AND -- TRUNC(SYSDATE) IN -- (SELECT MAX(B.A) -- FROM (SELECT TRUNC(SYSDATE, 'mm') + ROWNUM - 1 A -- FROM DBA_OBJECTS -- WHERE ROWNUM < 32) B -- WHERE TO_CHAR(B.A, 'day') = 'friday ')) OR -- (TO_CHAR(SYSDATE, 'mm') IN ('10', '11') AND -- TO_CHAR(SYSDATE, 'Day') = 'Friday ') OR -- TO_CHAR(SYSDATE, 'mm') = '12') ), DEPT_PEOPLE AS( SELECT EMP_CODE,MEANING,HCP.SF_LSHR_NO_GET(MEANING, 8) V_EMAIL FROM ( SELECT T.EMP_CODE,MEANING,ROWNUM FROM V_DATA T JOIN HCP.KS_LOOKUP_VALUE KLV ON (KLV.REVERSE2 = SUBSTR(HCP.SF_LSHR_NO_GET(T.EMP_CODE, 15), LENGTH(HCP.SF_LSHR_NO_GET(T.EMP_CODE, 15))-5) OR KLV.REVERSE2 = HCP.SF_LSHR_NO_GET(T.EMP_CODE, 2)) WHERE KLV.LOOKUP_TYPE = 'DEPT_PEOPLE' AND KLV.ENABLED = 'Y' ORDER BY KLV.REVERSE2 DESC) WHERE ROWNUM = 1 ), V_CNT AS( SELECT DECODE(HPB.WORK_PLACE, 0, '一园', 1, '二园', 2, '三园', HPB.WORK_PLACE) AS PLANT, HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 14) DIV, HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 15) DEPT_NAME, HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 13) CLASS_NAME, COUNT(HPB.EMP_CODE) UNPEOPLE, SUM(HPB.ANNUAL_LEAVE) UNDAY, L.V_EMAIL || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 9), 8) AS TOEMAIL, HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 10), 8) || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 11), 8) AS CCEMAIL FROM V_DATA HPB JOIN DEPT_PEOPLE L ON HPB.EMP_CODE=L.EMP_CODE GROUP BY DECODE(HPB.WORK_PLACE, 0, '一园', 1, '二园', 2, '三园', HPB.WORK_PLACE), HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 14), HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 15), HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 13), L.V_EMAIL || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 9), 8), HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 10), 8) || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 11), 8) UNION ALL SELECT '合计', '', '', '', UNPEOPLE, UNDAY, '', '' FROM (SELECT COUNT(EMP_CODE) UNPEOPLE, SUM(ANNUAL_LEAVE) UNDAY FROM V_DATA) WHERE UNDAY IS NOT NULL ) SELECT PLANT 厂区, DIV 处级, DEPT_NAME 部门名称, CLASS_NAME 课别名称, UNPEOPLE 未休人数, UNDAY 未休天数, TOEMAIL, CCEMAIL FROM V_CNT ORDER BY PLANT, DIV, DEPT_NAME, CLASS_NAME;
07-19
如下SQL需查找刷卡卡点资料,刷卡时间在排班时间规定的上班时间点和下班时间点和加班时间点加1分钟范围内,WP_TYPE(1:上班,2:下班),IS_NEXT_DAY(1:次日卡)请协助修改, 并优化oracle如下SQL性能,提高执行效率和减少资源占用: WITH work_s AS( SELECT A.EMP_CODE,A.EMPNAME,A.WORK_DATE,B.WS_NUMBER,B.WS_SIMPLE_NAME,C.BTW_TIME_TOTAL,C.LAST_TIME_TOTAL,C.Last_start_time,C.last_end_time, case when D.WP_TYPE=2 AND D.IS_NEXT_DAY=1 then TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss'))+ 1 ELSE TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss')) end POINT_TIME, D.ADV_TIME,D.OVER_TIME,D.WP_TYPE,D.IS_NEXT_DAY, case when D.WP_TYPE=2 AND D.IS_NEXT_DAY=1 then CASE WHEN B.WS_NUMBER='035A' OR B.WS_NUMBER='035B' THEN TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss'))+ 1 +C.LAST_TIME_TOTAL/24/60+1.5/24 ELSE TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss'))+ 1 +C.LAST_TIME_TOTAL/24/60+2/24 END when D.WP_TYPE=2 then CASE WHEN B.WS_NUMBER='035A' OR B.WS_NUMBER='035B' THEN TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss'))+C.LAST_TIME_TOTAL/24/60+1.5/24 WHEN B.WS_NUMBER='005A' THEN TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss')) +C.LAST_TIME_TOTAL/24/60+1/24 ELSE TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss'))+C.LAST_TIME_TOTAL/24/60+2/24 END end OVERPOINT_TIME, CASE when D.WP_TYPE=2 then CASE WHEN B.WS_NUMBER='005A' THEN TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||''||to_char(D.POINT_TIME,'hh24:mi:ss')) +C.LAST_TIME_TOTAL/24/60+2/24+2/24 END end OVERPOINT_TIME2 FROM HCP.v_clk_tz_emp_workday_info A JOIN HCP.v_clk_work_shift B ON A.WS_ID=B.ID JOIN HCP.v_clk_work_block C ON A.WS_ID = C.WS_ID JOIN HCP.v_clk_work_point D ON C.ID = D.WB_ID WHERE A.WORK_DATE= trunc(SYSDATE-1) ), attendance_data AS ( SELECT DECODE(HPB.WORK_PLACE, 0, 'LSP1', 1, 'LSP2', 2, 'LSP3', HPB.WORK_PLACE) AS MASTER_NO, DECODE(HPB.WORK_PLACE, 0, '一园', 1, '二园', 2, '三园', HPB.WORK_PLACE) AS WORK_PLACE, HPB.EMPCODE, HPB.EMPNAME, FF.FGT02, FF.FGT08, SUBSTR(FF.FGT08,3,1) AS card_type, HPB.RANK_NAME, HPB.ORG_NAME, DECODE(H.SALARY_TYPE,1,'月薪',2,'计时',3,'计件',H.SALARY_TYPE) AS SALARY_TYPE FROM FINGER5.FGT_FILE FF JOIN HCP.TZ_EMP_IN HPB ON FF.FGT10 = HPB.EMPCODE JOIN HCP.v_clk_tz_employee H ON FF.FGT10 = H.EMPCODE JOIN work_s A ON A.EMP_CODE=FF.FGT10 WHERE FF.FGT02 >= trunc(SYSDATE-1) AND FF.FGT02 < trunc(SYSDATE-1) + 1 -- 昨天全天范围 AND FF.FGT03 <> '4' -- 排除无效打卡 AND LENGTH(FF.FGT08) = 5 AND SUBSTR(FF.FGT08,3,1) IN ('1','2') -- 只考虑上班卡和下班卡 AND ( (SUBSTR(FF.FGT08,3,1) = '1' -- 上班卡 AND A.WP_TYPE=1 AND FF.FGT02 >= A.POINT_TIME AND FF.FGT02 < A.POINT_TIME + INTERVAL '1' MINUTE ) OR (SUBSTR(FF.FGT08,3,1) = '2' -- 下班卡 AND A.WP_TYPE=2 AND (CASE WHEN H.SALARY_TYPE=1 AND FF.FGT02 >= A.POINT_TIME AND FF.FGT02 < A.POINT_TIME + INTERVAL '1' MINUTE THEN 1 WHEN A.WS_NUMBER='005A' AND ((FF.FGT02 >= A.POINT_TIME AND FF.FGT02 < A.POINT_TIME + INTERVAL '1' MINUTE) OR (FF.FGT02 >= A.OVERPOINT_TIME AND FF.FGT02 < A.OVERPOINT_TIME + INTERVAL '1' MINUTE) OR (FF.FGT02 >= A.OVERPOINT_TIME2 AND FF.FGT02 < A.OVERPOINT_TIME2 + INTERVAL '1' MINUTE)) THEN 1 WHEN (FF.FGT02 >= A.POINT_TIME AND FF.FGT02 < A.POINT_TIME + INTERVAL '1' MINUTE) OR (FF.FGT02 >= A.OVERPOINT_TIME AND FF.FGT02 < A.OVERPOINT_TIME + INTERVAL '1' MINUTE) THEN 1 END)=1 ) ) ), attendance_filtered AS ( SELECT MASTER_NO, WORK_PLACE, EMPCODE, EMPNAME, FGT02, FGT08, card_type, DECODE(card_type, '1', '上班卡', '2', '下班卡') AS status, RANK_NAME, ORG_NAME, ROW_NUMBER() OVER ( PARTITION BY EMPCODE, card_type ORDER BY FGT02 ASC ) AS rank -- 按员工和打卡类型分区,取最早记录 FROM attendance_data ), tz_opr AS ( SELECT KLV.MEANING, KLV.DESCRIPTION, KLV.REVERSE2, KLV.REVERSE1, KLV.REVERSE3 IP, KLV.REVERSE4 FROM HCP.KS_LOOKUP_VALUE KLV WHERE KLV.LOOKUP_TYPE = 'KQ_SEPARATE_MACHINE' AND KLV.ENABLED = 'Y' ) SELECT MASTER_NO, WORK_PLACE AS MASTER_NAME, EMPCODE AS ID_NO_SZ, EMPNAME AS NAME_SZ, FGT02 AS RECORDTIME, FGT08 AS MACHINE_NO, trunc(SYSDATE-1) AS CDAY, -- 修改为TRUNC确保纯日期输出 A.REVERSE4 AS MACHINE_LOC, status AS SHIFTTYPE, RANK_NAME AS TITLE_NO, HCP.SF_LSHR_NO_GET(EMPCODE, 18) AS TITLE_NAME, HCP.SF_LSHR_NO_GET(EMPCODE, 2) AS SEGMENT_NO, HCP.SF_LSHR_NO_GET(EMPCODE, 13) AS SEGMENT_NAME, SUBSTR(HCP.SF_LSHR_NO_GET(EMPCODE, 15), LENGTH(HCP.SF_LSHR_NO_GET(EMPCODE, 15))-5) AS DEPT_NO, -- 取后6位 HCP.SF_LSHR_NO_GET(EMPCODE, 15) AS DEPT_NAME, HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(EMPCODE, 9), 8) AS TOEMAIL, HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(EMPCODE, 10), 8) || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(EMPCODE, 11), 8) AS CCEMAIL, '' AS TEMP_COMPANY FROM attendance_filtered JOIN tz_opr A ON FGT08 = A.MEANING WHERE rank = 1 -- 取每个员工每个打卡类型的最早记录 ORDER BY status, FGT02; -- 按打卡类型和时间排序
07-30
如下SQL执行时报错D.POINT_TIME,[Error] Execution (18: 80): ORA-01843: not a valid month,请协助修改, 并优化oracle如下SQL性能,提高执行效率和减少资源占用: WITH work_s AS ( SELECT A.EMP_CODE, A.EMPNAME, A.WORK_DATE, B.WS_NUMBER, B.WS_SIMPLE_NAME, C.LAST_TIME_TOTAL, D.POINT_TIME, D.ADV_TIME, D.OVER_TIME, D.WP_TYPE, D.IS_NEXT_DAY, -- 统一时间计算逻辑 CASE WHEN D.WP_TYPE = 2 AND D.IS_NEXT_DAY = 1 THEN TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||' '||to_char(D.POINT_TIME,'hh24:mi:ss')) + 1--INTERVAL '1' DAY ELSE TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||' '||to_char(D.POINT_TIME,'hh24:mi:ss')) END AS base_time, -- 优化OVERPOINT_TIME计算 TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||' '||to_char(D.POINT_TIME,'hh24:mi:ss')) + CASE WHEN D.WP_TYPE = 2 THEN (C.LAST_TIME_TOTAL + CASE WHEN B.WS_NUMBER IN ('035A','035B') THEN 90 WHEN B.WS_NUMBER = '005A' THEN 60 ELSE 120 END)/1440 ELSE 0 END + CASE WHEN D.IS_NEXT_DAY = 1 THEN 1 ELSE 0 END AS overpoint_time, -- 单独计算005A的特殊时间点 CASE WHEN B.WS_NUMBER = '005A' AND D.WP_TYPE = 2 THEN TO_TIMESTAMP(to_char(A.WORK_DATE,'yyyy/mm/dd')||' '||to_char(D.POINT_TIME,'hh24:mi:ss')) + (C.LAST_TIME_TOTAL + 240)/1440 END AS overpoint_time2 FROM HCP.v_clk_tz_emp_workday_info A JOIN HCP.v_clk_work_shift B ON A.WS_ID = B.ID JOIN HCP.v_clk_work_block C ON A.WS_ID = C.WS_ID JOIN HCP.v_clk_work_point D ON C.ID = D.WB_ID WHERE A.WORK_DATE = TRUNC(SYSDATE-1) ), attendance_data AS ( SELECT DECODE(HPB.WORK_PLACE, 0, 'LSP1', 1, 'LSP2', 2, 'LSP3') AS MASTER_NO, DECODE(HPB.WORK_PLACE, 0, '一园', 1, '二园', 2, '三园') AS WORK_PLACE, HPB.EMPCODE, HPB.EMPNAME, FF.FGT02, FF.FGT08, SUBSTR(FF.FGT08,3,1) AS card_type, HPB.RANK_NAME, HPB.ORG_NAME, DECODE(H.SALARY_TYPE,1,'月薪',2,'计时',3,'计件') AS SALARY_TYPE FROM FINGER5.FGT_FILE FF JOIN HCP.TZ_EMP_IN HPB ON FF.FGT10 = HPB.EMPCODE JOIN HCP.v_clk_tz_employee H ON FF.FGT10 = H.EMPCODE JOIN work_s A ON A.EMP_CODE = FF.FGT10 WHERE FF.FGT02 >= TRUNC(SYSDATE-1) AND FF.FGT02 < TRUNC(SYSDATE-1)+1 -- 优化日期范围 AND FF.FGT03 <> '4' AND LENGTH(FF.FGT08) = 5 AND SUBSTR(FF.FGT08,3,1) IN ('1','2') AND ( (SUBSTR(FF.FGT08,3,1) = '1' AND A.WP_TYPE = 1 AND FF.FGT02 BETWEEN A.base_time AND A.base_time + INTERVAL '1' MINUTE) OR (SUBSTR(FF.FGT08,3,1) = '2' AND A.WP_TYPE = 2 AND ( CASE WHEN (H.SALARY_TYPE = 1 AND FF.FGT02 BETWEEN A.base_time AND A.base_time + INTERVAL '1' MINUTE) THEN 1 --OR WHEN H.SALARY_TYPE <> 1 AND (A.WS_NUMBER = '005A' AND ( FF.FGT02 BETWEEN A.base_time AND A.base_time + INTERVAL '1' MINUTE OR FF.FGT02 BETWEEN A.overpoint_time AND A.overpoint_time + INTERVAL '1' MINUTE OR FF.FGT02 BETWEEN A.overpoint_time2 AND A.overpoint_time2 + INTERVAL '1' MINUTE)) THEN 1 --OR WHEN H.SALARY_TYPE <> 1 AND (FF.FGT02 BETWEEN A.base_time AND A.base_time + INTERVAL '1' MINUTE OR FF.FGT02 BETWEEN A.overpoint_time AND A.overpoint_time + INTERVAL '1' MINUTE) THEN 1 END )=1) ) ), attendance_filtered AS ( SELECT MASTER_NO, WORK_PLACE, EMPCODE, EMPNAME, FGT02, FGT08, card_type, DECODE(card_type, '1', '上班卡', '2', '下班卡') AS status, RANK_NAME, ORG_NAME, SALARY_TYPE, ROW_NUMBER() OVER ( PARTITION BY EMPCODE, card_type ORDER BY FGT02 ASC ) AS rank -- 按员工和打卡类型分区,取最早记录 FROM attendance_data ), tz_opr AS ( SELECT KLV.MEANING, KLV.DESCRIPTION, KLV.REVERSE2, KLV.REVERSE1, KLV.REVERSE3 IP, KLV.REVERSE4 FROM HCP.KS_LOOKUP_VALUE KLV WHERE KLV.LOOKUP_TYPE = 'KQ_SEPARATE_MACHINE' AND KLV.ENABLED = 'Y' ) SELECT MASTER_NO, WORK_PLACE AS MASTER_NAME, EMPCODE AS ID_NO_SZ, EMPNAME AS NAME_SZ, FGT02 AS RECORDTIME, FGT08 AS MACHINE_NO, trunc(SYSDATE-1) AS CDAY, -- 修改为TRUNC确保纯日期输出 A.REVERSE4 AS MACHINE_LOC, status AS SHIFTTYPE, RANK_NAME AS TITLE_NO, HCP.SF_LSHR_NO_GET(EMPCODE, 18) AS TITLE_NAME, SALARY_TYPE, HCP.SF_LSHR_NO_GET(EMPCODE, 2) AS SEGMENT_NO, HCP.SF_LSHR_NO_GET(EMPCODE, 13) AS SEGMENT_NAME, SUBSTR(HCP.SF_LSHR_NO_GET(EMPCODE, 15), LENGTH(HCP.SF_LSHR_NO_GET(EMPCODE, 15))-5) AS DEPT_NO, -- 取后6位 HCP.SF_LSHR_NO_GET(EMPCODE, 15) AS DEPT_NAME, HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(EMPCODE, 9), 8) AS TOEMAIL, HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(EMPCODE, 10), 8) || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(EMPCODE, 11), 8) AS CCEMAIL, '' AS TEMP_COMPANY FROM attendance_filtered JOIN tz_opr A ON FGT08 = A.MEANING WHERE rank = 1 -- 取每个员工每个打卡类型的最早记录 ORDER BY status, FGT02; -- 按打卡类型和时间排序
最新发布
08-02
SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL -- new , PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL -- new , PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE , DECODE(PIS.REVERT_FLOW,'N',PIS.FLOW_TYPE,DECODE(PIS.FLOW_TYPE,'I','E','I')) AS FLOW_TYPE , PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION , PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE , PFT.FLIGHT_DATE AS FLIGHT_DATE , PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE , PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER , PFT.FLOW_TYPE AS AIRCRAFT_FLOW , FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE , PPT.AWB_NUMBER AS AWB_NUMBER , PPT.WEIGHT AS WEIGHT , PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR , PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE , PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE , PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE , PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE , PPT.REVENUE_TYPE AS REVENUE_TYPE , PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE , PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID , PPT.AWB_UID AS AWB_UID , PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID , PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT , FZ_AIRLINES FA , PN_TONNAGE_FLT_PORTS PTFP , PN_PORT_TONNAGES PPT , FF_AIRCRAFT_SERVICE_TYPES FAST , SR_PN_INVOICE_SEPARATIONS PIS --new , SR_PN_INVOICE_SEP_DETAILS PISD--new , SR_PN_INV_SEP_PORT_TONNAGES PISPT --new WHERE PFT.FLIGHT_OPERATION_DATE >= trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE,-1) ELSE ADD_MONTHS(:rundate,-1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND (PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR (PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (select EFF_DATE from SPECIAL_HANDLING_EFF_DATE) )) AND PFT.DELETING_DATETIME IS NULL AND FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL AND PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL AND PPT.TONNAGE_FLIGHT_PORT_UID (+)= PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE (+)= 'M' AND PPT.DISCREPANCY_TYPE (+)= 'NONE' AND PPT.ADJUSTMENT_INC_FLAG (+)= 'Y' AND PPT.DELETING_DATETIME (+) IS NULL AND FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL AND PIS.TEMPORAL_NAME = TO_CHAR((CASE :rundate --new WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END ), 'YYYYMM') || '00' AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID --new AND PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID --new AND PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID --new AND PIS.PRINT_SUPPORTING_DOC = 'Y';上面是oracle的写法,请转成spark SQL的写法。
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值