微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有没有更优雅的方法来编写这个 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 举报,一经查实,本站将立刻删除。