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
with vHgInfoTable as ( select a.l_hg_date, a.l_redeem_lawdate, a.l_redeem_liquidate, a.l_settle_date, a.l_redeal_date, a.l_settle_speed, a.c_entrust_direction, max( case when b.c_entrust_direction in ('15','16','17','18','26','27','30', '31','35','36','37','38','39','40') then a.L_REDEEM_DAYS else nvl((to_date(a.l_settle_date, 'YYYYMMDD') - (select min(to_date(tm.l_date, 'YYYYMMDD')) from tmarkettradeday tm where tm.l_Date > a.l_hg_date and tm.vc_tradeday_type = j.vc_tradeday_type and tm.c_trade_flag In ('1', '3'))),0) end) l_use_days, sum(a.l_deal_amount) l_deal_amount, sum(decode(b.c_fund_direction, '1', 1, -1) * a.en_deal_balance - a.en_fee) en_net_zj, sum(decode(b.c_entrust_direction, '5', -1, 1) * a.en_now_interest) en_now_interest, sum(decode(b.c_fund_direction, '1', -1, 1) * (a.en_deal_balance + a.en_redeem_interest)) en_ret_zj, sum(decode(b.c_fund_direction, '1', -1, 1) * a.en_redeem_interest - a.en_fee) en_profit, sum(a.en_redeem_interest - a.en_fee - (a.en_deal_balance + a.en_fee) * nvl((select en_ratio from (select en_year_rate / l_days en_ratio, l_fund_id, l_org_id from TINTERESTRATE where vc_currency_no = 'CNY' and l_rate_type = '1' order by l_org_id desc, l_fund_id desc) vi where ((vi.l_fund_id = a.l_fund_id) or (vi.l_fund_id = -1)) and ((vi.l_org_id = tfd.l_org_id) or (vi.l_org_id = -1)) and rownum = 1), 0) * decode(a.l_redeem_days, 3, decode(to_number(to_char(to_date(to_char(a.l_date, 99999999), 'yyyymmdd'), 'd')), 2, 3, 3, 5, 4, 5, 5, 4, 6, 1, a.l_redeem_days), a.l_redeem_days)) en_extra_profit, min(b.vc_entrustdir_name) vc_entrustdir_name, a.vc_inter_code, (case when count(distinct(a.l_fund_id)) = 1 then min(a.l_fund_id) else -1 end) l_fund_id, (case when count(distinct(a.vc_stockholder_id)) = 1 then min(a.vc_stockholder_id) else '混合' end) vc_stockholder_id, (case when count(distinct(a.l_basecombi_id)) = 1 then min(e.vc_combi_no) else '混合' end) vc_combi_no, (case when count(distinct(a.l_basecombi_id)) = 1 then min(a.l_basecombi_id) else -1 end) l_combi_id, (case when count(distinct(a.l_basecombi_id)) = 1 then min(e.vc_combi_name) else '混合' end) vc_combi_name, (case when count(distinct(e.l_asset_id)) = 1 then min(e.l_asset_id) else -1 end) l_asset_id, '' vc_asset_name, '' vc_asset_no, (case when count(distinct(a.l_operator_no)) = 1 then min(a.l_operator_no) else -1 end) l_operator_no, a.c_redeal_flag, decode(sum(a.l_deal_amount), 0, 0, sum(a.en_deal_price * a.l_Deal_Amount) / sum(a.l_deal_amount)) en_avgInterest, (case when count(distinct(tfd.l_org_id)) = 1 then min(tfd.l_org_id) else -1 end) l_org_id, '' vc_org_name, '' vc_org_code, '' VC_CAPITAL_ACCOUNT, min(j.vc_market_name) vc_market_name, sum(decode(b.c_fund_direction, '1', -1, 1) * a.en_redeem_interest) en_redeem_interest, sum(a.en_fee) en_fee from THGREGISTER a, TENTRUSTDIRECTION b, TMARKETINFO J, TCOMBI e, tfundinfo tfd where a.c_entrust_direction = b.c_entrust_direction and a.c_market_no = b.c_market_no and a.c_market_no = j.c_market_no and a.l_basecombi_id = e.l_combi_id and a.l_fund_id = tfd.l_fund_id and tfd.l_org_id in ( tfd.l_org_id ) and a.C_STOCK_TYPE in ( a.c_stock_type ) and a.c_market_no in ('1', '2') and not exists (select l_hgregister_serial_no from TDELAYDEALHGREGISTER t where t.l_hgregister_serial_no = a.l_serial_no and t.l_fund_id in ( a.l_fund_id ) and t.l_basecombi_id in ( e.l_combi_id ) and t.vc_stockholder_id in ( a.vc_stockholder_id ) and ((t.vc_inter_code = '-1' ) or ( '-1' = '-1')) and ((t.l_hg_date between '-1' and '-1' ) or ( '-1' = '-1'))) and a.l_fund_id in ( a.l_fund_id ) and a.vc_stockholder_id in ( a.vc_stockholder_id ) -- and e.l_asset_id in ( ^sAssetId ) and e.l_combi_id in ( e.l_combi_id ) and ((a.vc_inter_code = '-1' ) or ( '-1' = '-1')) and ((e.c_combi_status = '1' ) or ( '1' = '-1')) and ((a.l_hg_date between '-1' and '-1' ) or ( '-1' = '-1')) and ((a.l_redeem_lawdate between '-1' and '-1' ) or ( '-1' = '-1')) and ((a.l_redeem_liquidate between '-1' and '-1' ) or ( '-1' = '-1')) and ((a.c_redeal_flag <> '1') or ( '-1' = '-1')) and ((a.c_redeal_flag = '0') or ((a.c_redeal_flag = '1') and (a.l_redeem_liquidate = '20250220' )) or ( '0' = '-1')) and ((a.c_redeal_flag = '0') or ((a.c_redeal_flag = '1') and (a.l_redeem_liquidate < '20250220' )) or ( '-1' = '-1')) and a.C_ENTRUST_DIRECTION in ('5','6','15','16') and (select count(*)from topfundright where topfundright.l_asset_id = e.l_asset_id and topfundright.c_layer = '2' and topfundright.l_operator_no = 1000 and instr(topfundright.vc_rights, '1') > 0) > 0 group by a.l_hg_date, a.l_redeem_lawdate, a.l_redeem_liquidate, a.l_settle_date, a.l_redeal_date, a.l_settle_speed, a.vc_inter_code, a.C_ENTRUST_DIRECTION, a.c_redeal_flag ,a.l_fund_id ,e.l_asset_id ,a.vc_stockholder_id ,a.l_operator_no union all select a.L_NEW_HG_DATE l_hg_date, a.l_redeem_lawdate, a.L_NEW_REDEEM_LIQUIDATE l_redeem_liquidate, a.l_settle_date, a.l_redeal_date, a.l_settle_speed, a.c_entrust_direction, max( case when b.c_entrust_direction in ('15','16','17','18','26','27','30', '31','35','36','37','38','39','40') then a.L_REDEEM_DAYS else nvl((to_date(a.l_settle_date, 'YYYYMMDD') - (select min(to_date(tm.l_date, 'YYYYMMDD')) from tmarkettradeday tm where tm.l_Date > a.L_NEW_HG_DATE and tm.vc_tradeday_type = j.vc_tradeday_type and tm.c_trade_flag In ('1', '3'))),0) end) l_use_days, sum(a.l_deal_amount) l_deal_amount, sum(decode(b.c_fund_direction, '1', 1, -1) * a.en_deal_balance - a.en_fee) en_net_zj, sum(decode(b.c_entrust_direction, '5', -1, 1) * a.en_now_interest) en_now_interest, sum(decode(b.c_fund_direction, '1', -1, 1) * (a.en_deal_balance + a.en_redeem_interest)) en_ret_zj, sum(decode(b.c_fund_direction, '1', -1, 1) * a.en_redeem_interest - a.en_fee) en_profit, sum(a.en_redeem_interest - a.en_fee - (a.en_deal_balance + a.en_fee) * nvl((select en_ratio from (select en_year_rate / l_days en_ratio, l_fund_id, l_org_id from TINTERESTRATE where vc_currency_no = 'CNY' and l_rate_type = '1' order by l_org_id desc, l_fund_id desc) vi where ((vi.l_fund_id = a.l_fund_id) or (vi.l_fund_id = -1)) and ((vi.l_org_id = tfd.l_org_id) or (vi.l_org_id = -1)) and rownum = 1), 0) * decode(a.l_redeem_days, 3, decode(to_number(to_char(to_date(to_char(a.l_date, 99999999), 'yyyymmdd'), 'd')), 2, 3, 3, 5, 4, 5, 5, 4, 6, 1, a.l_redeem_days), a.l_redeem_days)) en_extra_profit, min(b.vc_entrustdir_name) vc_entrustdir_name, a.vc_inter_code, (case when count(distinct(a.l_fund_id)) = 1 then min(a.l_fund_id) else -1 end) l_fund_id, (case when count(distinct(a.vc_stockholder_id)) = 1 then min(a.vc_stockholder_id) else '混合' end) vc_stockholder_id, (case when count(distinct(a.l_basecombi_id)) = 1 then min(e.vc_combi_no) else '混合' end) vc_combi_no, (case when count(distinct(a.l_basecombi_id)) = 1 then min(a.l_basecombi_id) else -1 end) l_combi_id, (case when count(distinct(a.l_basecombi_id)) = 1 then min(e.vc_combi_name) else '混合' end) vc_combi_name, (case when count(distinct(e.l_asset_id)) = 1 then min(e.l_asset_id) else -1 end) l_asset_id, '' vc_asset_name, '' vc_asset_no, (case when count(distinct(a.l_operator_no)) = 1 then min(a.l_operator_no) else -1 end) l_operator_no, a.c_redeal_flag, decode(sum(a.l_deal_amount), 0, 0, sum(a.en_deal_price * a.l_Deal_Amount) / sum(a.l_deal_amount)) en_avgInterest, (case when count(distinct(tfd.l_org_id)) = 1 then min(tfd.l_org_id) else -1 end) l_org_id, '' vc_org_name, '' vc_org_code, '' VC_CAPITAL_ACCOUNT, min(j.vc_market_name) vc_market_name, sum(decode(b.c_fund_direction, '1', -1, 1) * a.en_redeem_interest) en_redeem_interest, sum(a.en_fee) en_fee from TDELAYDEALHGREGISTER a, TENTRUSTDIRECTION b, TMARKETINFO J, TCOMBI e, tfundinfo tfd, tstockinfo ts where a.c_entrust_direction = b.c_entrust_direction and a.c_market_no = b.c_market_no and a.c_market_no = j.c_market_no and a.l_basecombi_id = e.l_combi_id and a.l_fund_id = tfd.l_fund_id and tfd.l_org_id in ( tfd.l_org_id ) and a.c_market_no in ('1', '2') and a.l_fund_id in ( a.l_fund_id) and a.VC_INTER_CODE = ts.VC_INTER_CODE and ts.C_STOCK_TYPE in ( ts.c_stock_type ) and a.vc_stockholder_id in ( a.vc_stockholder_id ) -- and e.l_asset_id in ( ^sAssetId ) and e.l_combi_id in ( e.l_combi_id ) and ((a.vc_inter_code = '-1' ) or ( '-1' = '-1')) and ((e.c_combi_status = '1' ) or ( '1' = '-1')) and ((a.L_NEW_HG_DATE between '-1' and '-1') or ( '-1' = '-1')) and ((a.l_redeem_lawdate between '-1' and '-1' ) or ( '-1' = '-1')) and ((a.L_NEW_REDEEM_LIQUIDATE between '-1' and '-1' ) or ( '-1' = '-1')) and ((a.c_redeal_flag <> '1') or ( '-1' = '-1')) and ((a.c_redeal_flag = '0') or ((a.c_redeal_flag = '1') and (a.L_NEW_REDEEM_LIQUIDATE = '20250220' )) or ( '0' = '-1')) and ((a.c_redeal_flag = '0') or ((a.c_redeal_flag = '1') and (a.L_NEW_REDEEM_LIQUIDATE < '20250220' )) or ( '-1' = '-1')) and a.C_ENTRUST_DIRECTION in ('5','6','15','16') and (select count(*)from topfundright where topfundright.l_asset_id = e.l_asset_id and topfundright.c_layer = '2' and topfundright.l_operator_no = 1000 and instr(topfundright.vc_rights, '1') > 0) > 0 group by a.L_NEW_HG_DATE, a.l_redeem_lawdate, a.L_NEW_REDEEM_LIQUIDATE, a.l_settle_date, a.l_redeal_date, a.l_settle_speed, a.vc_inter_code, a.C_ENTRUST_DIRECTION, a.c_redeal_flag ,a.l_fund_id ,e.l_asset_id ,a.vc_stockholder_id ,a.l_operator_no union all select a.l_hg_date, a.l_redeem_lawdate, a.l_redeem_liquidate, a.l_settle_date, a.l_redeal_date, a.l_settle_speed, a.c_entrust_direction, max( case when b.c_entrust_direction in ('15','16','17','18','26','27','30', '31','35','36','37','38','39','40') then a.L_REDEEM_DAYS else nvl((to_date(a.l_settle_date, 'YYYYMMDD') - (select min(to_date(tm.l_date, 'YYYYMMDD')) from tmarkettradeday tm where tm.l_Date > a.l_hg_date --20160527 20160531 and tm.vc_tradeday_type = j.vc_tradeday_type and tm.c_trade_flag In ('1', '3'))),0) end) l_use_days, sum(a.l_deal_amount) l_deal_amount, sum(decode(b.c_fund_direction, '1', 1, -1) * a.en_deal_balance - a.en_fee) en_net_zj, sum(decode(b.c_entrust_direction, '5', -1, 1) * a.en_now_interest) en_now_interest, sum(decode(b.c_fund_direction, '1', -1, 1) * (a.en_deal_balance + a.en_redeem_interest)) en_ret_zj, sum(decode(b.c_fund_direction, '1', -1, 1) * a.en_redeem_interest - a.en_fee) en_profit, sum(a.en_redeem_interest - a.en_fee - (a.en_deal_balance + a.en_fee) * nvl((select en_ratio from (select en_year_rate / l_days en_ratio, l_fund_id, l_org_id from TINTERESTRATE where vc_currency_no = 'CNY' and l_rate_type = '1' order by l_org_id desc, l_fund_id desc) vi where ((vi.l_fund_id = a.l_fund_id) or (vi.l_fund_id = -1)) and ((vi.l_org_id = tfd.l_org_id) or (vi.l_org_id = -1)) and rownum = 1), 0) * decode(a.l_redeem_days, 3, decode(to_number(to_char(to_date(to_char(a.l_date, 99999999), 'yyyymmdd'), 'd')), 2, 3, 3, 5, 4, 5, 5, 4, 6, 1, a.l_redeem_days), a.l_redeem_days)) en_extra_profit, min(b.vc_entrustdir_name) vc_entrustdir_name, a.vc_inter_code, (case when count(distinct(a.l_fund_id)) = 1 then min(a.l_fund_id) else -1 end) l_fund_id, (case when count(distinct(a.vc_stockholder_id)) = 1 then min(a.vc_stockholder_id) else '混合' end) vc_stockholder_id, (case when count(distinct(a.l_basecombi_id)) = 1 then min(e.vc_combi_no) else '混合' end) vc_combi_no, (case when count(distinct(a.l_basecombi_id)) = 1 then min(a.l_basecombi_id) else -1 end) l_combi_id, (case when count(distinct(a.l_basecombi_id)) = 1 then min(e.vc_combi_name) else '混合' end) vc_combi_name, (case when count(distinct(e.l_asset_id)) = 1 then min(e.l_asset_id) else -1 end) l_asset_id, '' vc_asset_name, '' vc_asset_no, (case when count(distinct(a.l_operator_no)) = 1 then min(a.l_operator_no) else -1 end) l_operator_no, a.c_redeal_flag, decode(sum(a.l_deal_amount), 0, 0, sum(a.en_deal_price * a.l_Deal_Amount) / sum(a.l_deal_amount)) en_avgInterest, (case when count(distinct(tfd.l_org_id)) = 1 then min(tfd.l_org_id) else -1 end) l_org_id, '' vc_org_name, '' vc_org_code, '' VC_CAPITAL_ACCOUNT, min(j.vc_market_name) vc_market_name, sum(decode(b.c_fund_direction, '1', -1, 1) * a.en_redeem_interest) en_redeem_interest, sum(a.en_fee) en_fee from ThisHGREGISTER a, TENTRUSTDIRECTION b, TMARKETINFO J, TCOMBI e, tfundinfo tfd where a.c_entrust_direction = b.c_entrust_direction and a.c_market_no = b.c_market_no and a.c_market_no = j.c_market_no and a.l_basecombi_id = e.l_combi_id and a.l_fund_id = tfd.l_fund_id and tfd.l_org_id in ( tfd.l_org_id ) and a.c_market_no in ('1', '2') and a.l_fund_id in ( a.l_fund_id ) and a.C_STOCK_TYPE in ( a.c_stock_type ) and a.vc_stockholder_id in ( a.vc_stockholder_id ) -- and e.l_asset_id in ( ^sAssetId ) and e.l_combi_id in ( e.l_combi_id ) and ((a.vc_inter_code = '-1' ) or ( '-1' = '-1')) and ((e.c_combi_status = '1' ) or ( '1' = '-1')) and ((a.l_hg_date between '-1' and '-1' ) or ( '-1' = '-1' )) and ((a.l_redeem_lawdate between '-1' and '-1' ) or ( '-1' = '-1' )) and ((a.l_redeem_liquidate between '-1' and '-1' ) or ( '-1' = '-1')) and '-1' = '1' and ((a.c_redeal_flag <> '1') or ( '0' = '-1')) and a.C_ENTRUST_DIRECTION in ('5','6','15','16') and (select count(*)from topfundright where topfundright.l_asset_id = e.l_asset_id and topfundright.c_layer = '2' and topfundright.l_operator_no = 1000 and instr(topfundright.vc_rights, '1') > 0) > 0 group by a.l_hg_date, a.l_redeem_lawdate, a.l_redeem_liquidate, a.l_settle_date, a.l_redeal_date, a.l_settle_speed, a.vc_inter_code, a.C_ENTRUST_DIRECTION, a.c_redeal_flag ,a.l_fund_id ,e.l_asset_id ,a.vc_stockholder_id ,a.l_operator_no ) select * from (select count(distinct rnum) over() as totalrn, rownum rn, tp.* from (select count(0) over() as total, dense_rank() over( order by t.l_fund_id,t.vc_inter_code desc,t.c_entrust_direction ) as rnum, t.* from ( select * from vHgInfoTable a order by a.l_fund_id,a.vc_inter_code desc,a.c_entrust_direction ) t ) tp )t3 where t3.rnum >= 1 and t3.rnum <= 50 order by t3.rnum 详细说明上面sql,最后查出来的数据是什么条件过滤的从哪个表取得什么字段
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值