根据状态显示唯一值
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
可以有两个状态I
和null
或只是NULL
。如果 vendor
在 Table2
查询中有 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
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
可以有两个状态I
和null
或只是NULL
。如果 vendor
在 Table2
查询中有 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