2016-09-12 2 views
-2

У меня есть сомнения ниже по запросу ниже таблицSQL half join из нескольких таблиц

Счета-фактуры | нет Соглашения Нет

1  |  0  | 
    2  |  0  | 
    3  |  101  | 
    4  |  102  | 
    5  |  201  | 
    1  |  201  | 

ежедневно соглашение стола -

Соглашения нет | Соглашение о статусе

101 |  closed  | 
    102 |  open  | 

ежемесячно соглашение стола -

Соглашения нет | Соглашение о статусе

201 |  closed  | 
    202 |  open  | 

я хочу, чтобы создать запрос для выбора счетов-фактур с соглашением не и статуса соглашения

пожалуйста, помогите

+0

Вы можете показать нам, что вы сделали? – Prisoner

ответ

0

Вы можете добиться этого с левой присоединяется. Заменить эти псевдонимы таблиц и столбцов с вашим, и это будет код:

SELECT 
     InvoiceNo 
    , A.AgreementNo 
    , [AgreementStatus] = IFNull(B.AgreementStatus, C.AgreementStatus) 
FROM 
    Agreements AS A 
     LEFT JOIN 
    DailyAgreements AS B 
     ON A.AgreementNo = B.AgreementNo 
     LEFT JOIN 
    MonthlyAgreements AS C 
     ON A.AgreementNo = C.AgreementNo 
0

Использования LEFT JOIN для объединения таблиц состояния и использовать CASE, чтобы проверить, была ли присоединились ежемесячно или ежедневно таблица состояния:

SELECT 
    i.invoice_no 
    , i.agreement_no 
    , CASE WHEN da.agreement_status IS NULL THEN ma.agreement_status ELSE da.agreement_status END as agreement_status 
FROM invoice as i 
LEFT JOIN daily_agreement as da ON da.agreement_no = i.agreement_no 
LEFT JOIN monthly_agreement as ma ON ma.agreement_no = i.agreement_no 

EDIT:

Мой запрос должен возвращать строки, как это:

invoice_no | agreement_no| agreement_status 
     1  |  0  | null 
     2  |  0  | null 
     3  |  101  | closed 
     4  |  102  | open 
     5  |  201  | closed 
     1  |  201  | closed 
Смежные вопросы