【问题标题】:Display unique values based on status根据状态显示唯一值
【发布时间】:2018-11-21 03:43:45
【问题描述】:

表一

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。如果vendorTable2 中有2 个状态,则查询应该只显示来自状态I 的地址,如果没有I 记录显示address 属于NULL

【问题讨论】:

    标签: sql join teradata


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-12
        • 1970-01-01
        • 1970-01-01
        • 2022-10-25
        • 1970-01-01
        相关资源
        最近更新 更多