根据状态显示唯一值

Display unique values based on status

Table 1

vendor  SID STATUS  
1234    100 I   
567     200 NULL

Table 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可以有两个状态Inull或只是NULL。如果 vendorTable2 查询中有 2 个状态,则应仅显示来自状态 I 的地址,如果没有 I 记录显示 address 属于 NULL.

您可以加​​入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;

您可以使用 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