首页 > 解决方案 > 根据状态显示唯一值

问题描述

表格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可以有两个状态的Inull或只是NULL。如果 avendor有 2 个状态的Table2查询应该只显示来自 status 的地址I,如果没有与 相关的I记录显示。addressNULL

标签: sqljointeradata

解决方案


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

推荐阅读