Отображать уникальные значения в зависимости от статуса - PullRequest
0 голосов
/ 11 июня 2018

Таблица 1

vendor  SID STATUS  
1234    100 I   
567     200 NULL

Таблица 2

vendor  SID STATUS  address
1234    100 I       Stallionln
1234    100 NULL    Antlerln
567     200 NULL    prairee

РЕЗУЛЬТАТ

Table1.vendor   Table1.SID  Table2.address
1234            100         Stallionln
567             200         prairee

Пожалуйста, предоставьте входные данные для разрешения address, в основном Table2 банкаиметь два статуса I и null или просто NULL.Если vendor имеет 2 состояния в запросе Table2, должен отображаться только адрес из состояния I, если нет I отображения записи address, относящегося к NULL.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вы можете использовать ROW_NUMBER, чтобы получить только один адрес для каждого поставщика:

SELECT
    t1.vendor,
    t1.SID,
    t2.address
FROM table1 AS t1
LEFT JOIN 
 ( 
   SELECT * 
   FROM table2
   QUALIFY
      ROW_NUMBER() -- return only one row per vendor, prefer status 'I'
      OVER (PARTITION BY vendor
            ORDER BY status NULLS LAST) = 1
 ) AS t2 
ON t1.vendor = t2I.vendor
0 голосов
/ 11 июня 2018

Вы можете присоединиться к table2 дважды.Один раз для status = 'I' и второй раз для status IS NULL, затем объедините результаты:

SELECT
    t1.vendor,
    t1.SID,
    COALESCE(t2I.address, t2Null.address) as address
FROM
    table1 t1
    LEFT OUTER JOIN table2 t2I 
        ON  t1.vendor = t2I.vendor
            AND t2I.status = 'I'
    LEFT OUTER JOIN table2 t2Null
        ON  t1.vendor = t2Null.vendor
            AND t2Null.status IS NULL;
...