Использование FULL OUTER JOIN - PullRequest
0 голосов
/ 18 мая 2018

У меня есть два представления, которые содержат идентификатор, единицу измерения и количество.Один взгляд для фактических данных и один для оценки.Я хочу оператор выбора, который будет возвращать все строки из обоих представлений для определенного идентификатора, независимо от того, находятся ли единицы в обоих представлениях.Кажется, я не могу заставить это работать с FULL OUTER JOIN, так как мне нужно соединиться по ID и модулю.

enter image description here

В этом примере vVMVoyEstTotalBLQuantitySrch содержит записьдля CBM, которого нет в vVMVoyBLQuantitySrch.Я все еще хочу все строки, например:

enter image description here

Также может быть наоборот, например, что vVMVoyEstTotalBLQuantitySrch не содержит конкретную единицу, но vVMVoyBLQuantitySrch делает, и снова яхочу все ряды.Если это хотя бы в одном из представлений, верните его.

Я попробовал некоторые фрагменты кода из Интернета, используя COALESCE как для ID, так и для Unit, но тогда я получаю только пропущенную запись (CBM),и не все.

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

попробуй ниже запрос

SELECT ISNULL(q1.Id,q2.Id) As Id, 
ISNULL(q1.estLoadUnit,q2.ActLoadUnit) As Units,
q1.EstTotalLoaded,
 q2.ActTotalLoadded
FROM vVMVoyEstTotalBLQuantitySrch  q1
FULL OUTER JOIN vVMVoyBLQuantitySrch q2 ON q1.Id = q2.Id
                     AND q2.actLoadUnit = q1.EstLoadUnit
0 голосов
/ 18 мая 2018

Ваша попытка выглядит следующим образом?

select . . .
from view1 v1 full outer join
     view2 v2
     on v1.id = v2.id
where 15506 in (v1.id, v2.id);

Хитрость в том, что вы должны проверить оба идентификатора, потому что full outer join может выдать NULL значения.

...