Вам не хватает SELECT (или UPDATE, DELETE или INSERT), который использует CTE. Нет смысла объявлять CTE, который не будет использоваться в выражении.
WITH
cte_REFERRALS_REPORTS (referralnum, refer_from, refer_from_name, refer_from_id, refer_to, refer_to_name, refer_to_id)
AS
(
SELECT
referralnum, refer_from,
ISNULL( RdicF.refname, PdicF.provname) END AS refer_from_name, --Code shortened, but you could keep the original for clarity.
refer_from_id, refer_to,
CASE
WHEN refer_to_id = 'R' THEN RdicT.refname
WHEN refer_to_id = 'P' THEN PdicT.provname END AS refer_to_name,
refer_to_id
FROM referral_t r
LEFT JOIN refcode_t RdicF ON r.refer_from = RdicF.refcode AND r.refer_from_id = 'R'
LEFT JOIN refcode_t RdicT ON r.refer_to = RdicT.refcode AND r.refer_to_id = 'R'
LEFT JOIN provcode_t PdicF ON r.refer_from = PdicF.provcode AND r.refer_from_id = 'P'
LEFT JOIN provcode_t PdicT ON r.refer_to = PdicT.provcode AND r.refer_to_id = 'P'
)
SELECT *
FROM cte_REFERRALS_REPORTS;
Я внес некоторые изменения в ваш код, которые могут помочь разработчикам и оптимизатору понять, что происходит на этих JOINS. Вам также нужно понимать, что точка с запятой (;) является терминатором оператора и должна находиться в конце каждого оператора, а не в начале CTE.