Я думаю, что это выдает результат, который вам нужен:
SELECT CASE
WHEN (A.cus_nm LIKE '%(%' AND A.cus_lkp_nm NOT LIKE '%REG%')
THEN 'N'
ELSE 'Y'
END AS Main,
CASE
WHEN (A.cus_nm LIKE '%(%' AND A.cus_lkp_nm NOT LIKE '%REG%')
THEN (SELECT B.cus_cus_no
FROM arrcus_rec AS B
WHERE B.cus_dun_no = A.cus_dun_no
-- Beware De Morgan
AND (B.cus_nm NOT LIKE '%(%' OR B.cus_lkp_nm LIKE '%REG%')
)
ELSE NULL::INTEGER
END AS Job_Account,
*
FROM arrcus_rec A
WHERE cus_dun_no IN (
SELECT cus_dun_no
FROM arrcus_rec
--WHERE cus_usg_sts = 'A'
GROUP BY cus_dun_no
HAVING COUNT(cus_dun_no) > 1
)
Подзапрос в основном предложении WHERE дает ответ 6410981 на данные, указанные на изображении (данные с AFAKORI заметно видны).
Второе выражение CASE дает желаемый магический ответ.Он определяет, является ли эта строка не основной учетной записью, и выполняет подзапрос для получения соответствующей основной учетной записи или возвращает NULL::INTEGER
(преобразование NULL в целочисленный тип), если это основная учетная запись.
Для данных примера:
cus_cus_no cus_lkp_nm cus_nm cus_dun_no
6625 AFAKORI, INC. AFAKORI, INC. 6410981
6694 AFAKORI, (594) AFAKORI, INC,(LBCCD-BUILDING) 6410981
6832 AFAKORI, (596) AFAKORI, INC.(SECURITY COMPLEX) 6410981
результат показанного запроса:
main|job_account|cus_cus_no |cus_lkp_nm . |cus_nm |cus_dun_no |
Y| | 6625|AFAKORI, INC. |AFAKORI, INC. | 6410981|
N| 6625| 6694|AFAKORI, (594) |AFAKORI, INC,(LBCCD-BUILDING) | 6410981|
N| 6625| 6832|AFAKORI, (596) |AFAKORI, INC.(SECURITY COMPLEX) | 6410981|