sql - SQL Server SELECT 第一次出现或如果没有出现 SELECT 其他条件
问题描述
我在尝试为这里的工作形成正确的 SQL 查询时遇到问题。我有两张表,一张称为 CUSTOMER,另一张称为 CUSTOMER_CONTACT。为了简化这一点,我将只包括相关的列名。
CUSTOMER
列:ID、客户名称CUSTOMER_CONTACT
列:ID、CUSTOMER_ID、CONTACT_VC、EMAIL
CUSTOMER_ID
是从 链接到CUSTOMER
表的外键CUSTOMER_CONTACT
。CONTACT_VC
只是他们联系信息的条目号。每个客户可能有多个CUSTOMER_CONTACT
记录,但它们将有一个唯一的CONTACT_VC
.
EMAIL
部分或全部也可以为空/空白。
我需要选择 /blank 所在的第一个条目CUSTOMER_CONTACT
,但如果所有条目都没有电子邮件地址,则选择EMAIL
NOT NULL
CUSTOMER_CONTACT
CUSTOMER_CONTACT WHERE CONTACT_VC = 1
关于如何做到这一点的任何建议?
解决方案
以下方法使用 ROW_NUMBER 根据您在每个CUSTOMER_ID
组中的排序逻辑检索一个数字,然后按检索到的第一条记录进行过滤。
您可以尝试以下方法:
SELECT
*
FROM (
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY CUSTOMER_ID
ORDER BY (CASE WHEN EMAIL IS NOT NULL THEN 0 ELSE 1 END),CONTACT_VC
) as rn
FROM
CUSTOMER_CONTACT
) t
WHERE rn=1
如果您想将此加入到客户表中,您可以使用上述查询作为子查询,例如
SELECT
c.*,
contact.*
FROM
CUSTOMER c
INNER JOIN (
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY CUSTOMER_ID
ORDER BY (CASE WHEN EMAIL IS NOT NULL THEN 0 ELSE 1 END),CONTACT_VC
) as rn
FROM
CUSTOMER_CONTACT
) contact ON c.ID = contact.CUSTOMER_ID and contact.rn=1
推荐阅读
- c# - 使用 Yield 使函数等到某事为真 Unity C#
- windows - 通过批处理文件运行 PowerShell [System.windows.forms.messagebox] 而不显示 cmd 窗口
- android - 我收到“无法打开 APK:I/O 错误”。运行 xamarin 表单应用程序时
- r - 闪亮的 textInput 到 SQL 中使用的 sting
- sql-server - 是否有从包含多个查询的 SSIS 包创建一个 CSV 的过程?
- javascript - 在同一页面上显示多个 DataTable (jQuery)
- scripting - 在 ROBLOX 工作室的货币脚本中出现错误
- sql - Oracle,从另一个查询(不同)中获取 Rowid,并使用 rowid 选择值
- angular - 在 Angular 8 单页应用程序中重新渲染 FirebaseUI Auth 小部件不起作用
- excel - 具有多个条件和 OR 条件的 COUNTIFS