Итак, для этого CTE вам не поможет.CTE предназначены для случаев, когда вы повторно используете подвыборы в одном запросе или если вы пытаетесь сделать что-то рекурсивное, и они часто не так полезны, как нам хотелось бы.Что касается сложности ваших запросов, я бы беспокоился о том, чтобы вначале просто разобраться с основополагающими вещами, и беспокоился о CTE, когда вы в них нуждаетесь, вместо того, чтобы искать их без веской причины.
Мне кажется, что вам здесь нужно нечто похожее на следующее:
Create Procedure [Schema].[ProcName]
(@PhoneNum VARCHAR(100),
@EmailAddr VARCHAR(100),
@DriverLic VARCHAR(100),
@EligiblityDate VARCHAR(10))
AS
BEGIN
select
max(case when ProductType = 1 and [Value] = @PhoneNum then 1 else 0 end) as PhoneNum,
max(case when ProductType = 2 and [Value] = @EmailAddr then 1 else 0 end) as EmailAddr,
max(case when ProductType = 3 and [Value] = @DriverLic then 1 else 0 end) as DriverLic
from [Table]
WHERE
Product = 'ProductExample'
AND @EligibilityDate BETWEEN EligStart and EligEnd
AND IsActive = 1
END
Это похоже на объединение нескольких запросов (вы правы, когда будете подозрительныповторяйте подобный код!) в одном запросе, но нет необходимости в дополнительном выборе.