sql - 根据状态显示唯一值
问题描述
表格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
。如果 avendor
有 2 个状态的Table2
查询应该只显示来自 status 的地址I
,如果没有与 相关的I
记录显示。address
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
推荐阅读
- php - PHP数组与不同类型的键合并
- python - 将 1D 列表解开回 3D 数组
- r - R中格子图图例中的线上点
- java - Android:带有 string.equals 的 If/else 语句,返回视觉确认
- string - 如何使用字符串打印列表的键?
- apache-spark - Spark2 Datetime查找高效的数据结构
- angular - “错误:在此配置中,Angular 需要 Zone.js”尝试设置平台服务器时
- c# - 从 GoogleAPI 重定向时,ASP.NET Core 'Oauth 状态丢失或无效'
- uwp - UWP Cryptographic Interop ... 签名问题
- powershell - Powershell 多行文本框输出