有没有更优雅的方法来编写这个 oracle sql 到 t-sql 的转换,它可以提高视图的查询性能?

问题描述

理解 DECODE 语句是一个 CASE 语句,其中(如果有 txt_value,则没有 flg_value,反之亦然(COALESCE 带有 where 条件,然后追加表示值)。了解基表结构不佳,无法更改。

Oracle sql 中的视图是:

( P_ACTIVITIES.disTRICT_CODE ) ||' ' ||  ( P_ACTIVITIES.WORK_REQUEST_NUMBER ) ""Activity"",P_ACTIVITIES.PROCESS_CODE ""ProcessNumber"",P_ACTIVITIES.CURRENT_ACTIVITY_STATUS_CODE ""Status"",P_ACTIVITIES.INITIAL_ACTIVITY_CODE ""InitialActivityCode"",P_ACTIVITIES.CURRENT_ACTIVITY_CODE ""CurrentActivityCode"",P_ACTIVITY_CODES.ACTIVITY_CODE_DESCRIPTION ""ActivityDescription"",(P_ACTIVITIES.RAISED_DATE_TIME) ""RaisedDate"",P_ACTIVITIES.COMPLETED_DATE_TIME ""CompletedDate"",P_ACTIVITIES.HOUSE_NUMBER_NAME ""HouseNameNumber"",P_ACTIVITIES.STREET_NAME ""Street"",P_ACTIVITIES.TOWN ""Town"",P_ACTIVITIES.POSTCODE ""Postcode"",P_ACTIVITIES.COMMENTS ""Comments"",INM_ACTIVITIES.GRID_REFERENCE_POINT ""GridReference"",t.*
FROM
  P_TIME_PERIODS  TP_RaisedDate,P_DCF_ACTIVITY,INM_ACTIVITIES,P_FINANCE_GROUPS,P_CREW_HQS,P_ACTIVITY_CODES,P_ACTIVITIES,(SELECT
  disTINCT
  M_WW_TWRKAE00.CDE_dist,M_WW_TWRKAE00.CDE_WR,(SELECT DECODE(a.TXT_VALUE,NULL,a.FLG_VALUE,a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E501') ""SewerPurpose"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E502') ""DepthToInvert"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E503') ""Maintainer"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E504') ""Diameter"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E505') ""CauSEOfBlockage"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E507') ""Location"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E508') ""RisingMain"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E509') ""ClearanceMethod"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E510') ""MinorCleanUp"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E511') ""MHCondition"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E512') ""BlockageAtIC"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E514') ""UpstreamMH"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E515') ""DownstreamMH"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E516') ""Material"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E517') ""NearWatercourse"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E518') ""IncerceptorRemoved"",a.TXT_VALUE)  FROM M_WW_TWRKAE00  a WHERE M_WW_TWRKAE00.cde_dist=a.cde_dist AND M_WW_TWRKAE00.cde_wr=a.cde_wr AND a.CDE_ATTRIBUTE='E513') ""AssetonGIS""
FROM
  M_WW_TWRKAE00,M_WW_DCF_LOOKUP
WHERE
  ( M_WW_TWRKAE00.CDE_ATTRIBUTE=M_WW_DCF_LOOKUP.ATTRIBUTE_CODE  )
  AND  ( M_WW_DCF_LOOKUP.DCF_SCREEN_DESC in ('Blockages','Flooding Investigation' ))) t
WHERE
      (t.cde_dist(+)=P_ACTIVITIES.district_code AND t.cde_wr(+)=P_ACTIVITIES.work_request_number)
 AND  ( P_ACTIVITY_CODES.ACTIVITY_CODE(+)=P_ACTIVITIES.CURRENT_ACTIVITY_CODE  )
  AND  ( P_ACTIVITIES.FINANCE_GROUP_CODE=P_FINANCE_GROUPS.FINANCE_GROUP_CODE(+)  )
  AND  ( P_CREW_HQS.CREW_HQ_CODE(+)=P_ACTIVITIES.CREW_HQ_CODE  )
  AND  ( TP_RaisedDate.PERIOD_LEVEL='day' AND TP_RaisedDate.PERIOD_START_DATE=Trunc(P_ACTIVITIES.COMPLETED_DATE_TIME)  )
  AND  ( P_ACTIVITIES.disTRICT_CODE=P_DCF_ACTIVITY.CDE_disT AND P_ACTIVITIES.WORK_REQUEST_NUMBER=P_DCF_ACTIVITY.CDE_WR  )
  AND  ( P_ACTIVITIES.disTRICT_CODE=INM_ACTIVITIES.disTRICT_CODE(+) AND P_ACTIVITIES.WORK_REQUEST_NUMBER=INM_ACTIVITIES.WORK_REQUEST_NUMBER(+)  )
  AND  (
  P_ACTIVITIES.CURRENT_ACTIVITY_CODE  IN ('SDBPR','SDBPU','XSDBPU','SDBPUX')
  AND  Trunc(P_ACTIVITIES.RAISED_DATE_TIME)  >=  Trunc(to_date(to_char(sysdate - 1,'DD-MM-RR')||' 23:59','DD-MM-RR HH24:mi')-29)
  )

如何将其转换为 T-sql 语言以获得最佳查询性能

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)