Вот один из способов:
DECLARE @document table (
DOC_NUM VARCHAR(MAX)
,DOC_TYPE VARCHAR(MAX)
,DOC_DATE VARCHAR(MAX)
)
INSERT INTO @document VALUES
('ACHAT190122001', 'FACA', '22/01/2019')
, ('ACHAT190222001', 'FACA', '22/02/2019')
, ('ACHAT190322001', 'FACA', '22/03/2019')
, ('BLCO190122001', 'BLCO', '22/01/2019')
, ('BLCO190123001', 'BLCO', '23/01/2019')
, ('BLCM190122001', 'BLCM', '22/01/2019')
DECLARE @documentd TABLE (
DOC_NUM VARCHAR(MAX)
,ART_CODE VARCHAR(MAX)
,ART_PRIX SMALLMONEY
)
INSERT INTO @documentd VALUES
('ACHAT190122001', 'ARTICLE1', 1000)
,('ACHAT190122001', 'ARTICLE2', 2000)
,('BLCO190122001', 'ARTICLE1', 900)
,('BLCO190123001', 'ARTICLE2', 800)
SELECT d1.DOC_NUM, dd1.ART_CODE, dd2.ART_PRIX, d2.DOC_DATE from @document d1
INNER JOIN @documentd dd1 ON dd1.DOC_NUM = d1.DOC_NUM
INNER JOIN @documentd dd2 ON dd2.ART_CODE = dd1.ART_CODE
INNER JOIN @document d2 ON d2.DOC_NUM = dd2.DOC_NUM AND d2.DOC_TYPE <> d1.DOC_TYPE
WHERE d1.DOC_TYPE = 'BLCO'
Возвращает:
DOC_NUM ART_CODE ART_PRIX DOC_DATE
BLCO190122001 ARTICLE1 1000.00 22/01/2019
BLCO190122001 ARTICLE2 2000.00 22/01/2019
Из результатов вашего примера я предположил, что вам нужны только документы BLCO, а не BLCM. Если вы хотите оба, просто измените последнюю строку на:
WHERE d.DOC_TYPE LIKE 'BLC%' AND d2.DOC_TYPE = 'FACA'