Может ли это быть применимо?
SELECT ACCOUNTID, COUNT(*) AS UniqueRecords
FROM (
SELECT ACCOUNTID, EMAIL
FROM AllVRContacts
WHERE ACCOUNTID = '00120000003bNmMAAU' AND LEN(EMAIL) > 1
UNION
SELECT ACCOUNTID, SECONDARY_EMAIL_ADDRESS__C
FROM AllVRContacts
WHERE ACCOUNTID = '00120000003bNmMAAU' AND LEN(SECONDARY_EMAIL_ADDRESS__C) > 1
) s
Я понял, что в основном вы хотели посчитать разные адреса электронной почты для каждого ACCOUNTID.
UNION во внутреннем запросе устраняет дубликаты, поэтому выходные данные (внутреннего запроса) содержат только отдельные пары идентификаторов учетных записей и электронных писем, будь то первичные или вторичные. В частности, это означает, что если адрес электронной почты хранится как основной, так и дополнительный, он будет учитываться только один раз. То же относится и к одному и тому же первичному или одинаковому вторичному адресу, хранящемуся в разных строках.
Теперь вам нужно только посчитать строки, что делается внешним запросом.
Если другие 9 подмножеств, о которых вы упомянули, означают просто другие ACCOUNTID, то, возможно, вы можете попробовать GROUP BY ACCOUNTID
, примененный к внешнему запросу, и часть ACCOUNTID = '...'
в обоих предложениях WHERE
избавится от подсчета писем для всех их одним запросом. То есть так:
SELECT ACCOUNTID, COUNT(*) AS UniqueRecords
FROM (
SELECT ACCOUNTID, EMAIL
FROM AllVRContacts
WHERE LEN(EMAIL) > 1
UNION
SELECT ACCOUNTID, SECONDARY_EMAIL_ADDRESS__C
FROM AllVRContacts
WHERE LEN(SECONDARY_EMAIL_ADDRESS__C) > 1
) s
GROUP BY ACCOUNTID