Мне приходится иметь дело с большим количеством кода, который, по моему мнению, должен работать намного быстрее, и я подозреваю, что некоторые проблемы связаны с чрезмерным использованием case when
в PROC SQL
.
Примеркода, взятого из SQL-запроса PROC, будет выглядеть следующим образом:
(case
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('F2F' 'F2' 'ME' 'VI' 'AP') then 'F2F'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('T' 'CB' 'CE' 'VOICE') then 'TEL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL='' and AFFC_BRANCH in ('CC_FR' 'CC_GENT' 'CC_LIEGE' 'CC_NL') then 'TEL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('DM_EMAIL' 'EMAIL' 'EMAIL_PS' 'OE' 'EMA' 'DM_' 'CI' 'LI' 'MP') then 'EMAIL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('DM_LETTER' 'MA') then 'MAIL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('EMAIL_OLB' 'OB') then 'IM'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('' 'OT' 'SM' 'EMESSAGE' 'OC') and DWH_CTI_CONTACT.CTIC_CHANNEL='' then 'OTHER'
when t3.AFFC_AFF_CONTACT_ID=. and DWH_CTI_CONTACT.CTIC_CONTACT_ID^=. and t3.AFFC_CHANNEL ='' and DWH_CTI_CONTACT.CTIC_CHANNEL^='' then DWH_CTI_CONTACT.CTIC_CHANNEL
end) AS Channel
Этот тип экземпляра можно перекодировать различными способами, используя таблицы поиска, используемые с объединениями SQL, или объединяя с SAS, или, возможно, используя форматы (которые яне смотрел много).Может быть, есть еще другие способы, о которых я не знаю.
Прежде чем я начну изменять весь этот код (его много ...), я хотел бы знать, что является наилучшей практикой, учитываячто моя главная забота - это скорость.