У меня есть «основная» таблица C1, в которой есть идентификатор записи, который, в свою очередь, может быть связан либо с учетной записью, либо с идентификатором клиента. Связь / связь хранится в двух отдельных таблицах, одна с идентификатором записи - отношения на уровне учетной записи, а другая - с идентификатором записи - взаимосвязью на уровне клиента. Записи C1 могут иметь отношения как с учетной записью, так и с клиентами.
Я пытаюсь создать соединение, чтобы привести отношения в одно аккуратное представление, где я ищу следующий результат:
ID ---- LINKAGE --- REL_TYPE
C1 Record ID --- ABC123 --- ACCOUNT
C1 Record ID --- 1235 ---- CUSTOMER
C1 Record ID --- NULL ---- UNLINKED
Как мы надеемся, ясно из вышеизложенного, учетная запись - это буквенно-цифровая c, а идентификатор клиента - числовой c. Я использую это в моем COALESCE для получения столбца LINKAGE, который не существует сам по себе.
Мой код сейчас выглядит так:
SELECT
C1.ID,
C1.Name,
COALESCE (C2.ACC_ID, C3.CUSTOMER_ID) AS LINKAGE,
CASE
WHEN LINKAGE LIKE '[A-Z]%' THEN CAST('ACCOUNT' AS varchar(255))
WHEN LINKAGE LIKE '10%' THEN CAST('CUSTOMER' AS varchar(255))
ELSE 'Unlinked'
END AS REL_TYPE
FROM C1
LEFT JOIN C2 ON C1.ID = C2.ID
LEFT JOIN C3 ON C1.ID = C3.ID
Синтаксически код выглядит отлично на SQL сервере в том, что я не получаю никаких ошибок, но когда я выполняю, я получаю сообщение об ошибке, что 'LINKAGE' не существует как столбец - это не так, но не сообщит ли объединение компилятору что связь является основой для функции case?
Пожалуйста, дайте мне знать, если требуется дополнительная ясность.
Ура, SQLGeekInTraining