У меня есть две таблицы: «Счета-фактуры» содержит информацию о счете-фактуре, а «CSEML» - адреса электронной почты клиентов.Тип адреса электронной почты (поле EMLTP) может быть обозначен как «AP» (Расчеты с поставщиками), «PO» (Закупки) или пустой (по умолчанию).Каждый клиент может иметь 3 адреса электронной почты в CSEML (по одному для каждого назначения).Я хотел бы иметь возможность сделать это в запросе: присоединить таблицу счетов-фактур к таблице электронной почты и извлечь максимум один адрес электронной почты на счет-фактуру - адрес AP, если он определен, в противном случае адрес PO, если он определен,в противном случае адрес по умолчанию, если он определен, иначе ноль.
CSEML имеет такую структуру
CUSTNO,EMLTP,EMAIL
000989367,PO,po@example.com
000254785,PO,po@example3.com
000989367,,default@example.com
000112354,,default@example2.com
000989367,AP,ap@example.com
000254785,,default@example3.com
Сейчас у меня есть следующий запрос
SELECT I.INVNO, I.CUSTNO, E.EMAIL
FROM INVOICES I
LEFT JOIN CSEML E ON I.CUSTNO = E.CUSTNO
WHERE I.INVNO = '10124'
, который возвращает что-то вродеэто когда определены все 3 адреса:
10124 000989367 po@example.com
10124 000989367 default@example.com
10124 000989367 ap@example.com
Как я могу назначить вес различным типам писем, чтобы я получал только наиболее предпочтительный доступный адрес?
Рабочий код на основе принятого ответа
SELECT INVNO, CUSTNO, EMAIL
FROM(
SELECT I.INVNO, I.CUSTNO, E.EMAIL, ROW_NUMBER() OVER (PARTITION BY I.INVNO
ORDER BY
CASE WHEN E.EMLTP = 'AP' THEN 0
WHEN E.EMLTP = 'PO' THEN 1
ELSE 2 END) rn
FROM INVOICES I
LEFT JOIN CSEML E ON I.CUSTNO = E.CUSTNO
WHERE I.INVNO = '10124'
) t
WHERE t.rn = 1