sql - 仅当列为空时插入值
问题描述
我有 2 个不同的 Excel 源
- 员工Excel源
- 销售Excel源
在我的员工来源中,我有多个文件夹,而在我的销售来源中,我有多个文件夹和多个工作表,因此为此我必须使用两个数据流任务和两个用于每个循环容器。
我需要从我的员工 Excel 源中获取 ID 列,如果我的员工源中的 ID 列不可用(null),那么我需要从我的销售源中获取 ID 列,他们有匹配 SSN,我该如何实现?
这是我的临时表
SELECT
ID, [SSN],
[Borrower FirstName], [Borrower LastName],
[Borrower Email], [Home Phone], [Cell Phone],
[Marital Status], [Date of Birth],
[Current Street Address], [City], [State], [Zip],
[YearsAtThisAddress], [Sex], [Ethnicity], [Race]
FROM
[Mortgage]
这是我的临时表,我的一半数据来自员工,一半来自销售。
员工来源有
[ID] ,[SSN] ,[Borrower FirstName] ,[Borrower LastName] ,[Borrower Email] ,[Home Phone] ,[Cell Phone] ,[Marital Status] ,[Date of Birth] ,[YearsAtThisAddress]
和 SALES 来源有
[ID] ,[SSN] ,[Borrower FirstName] ,[Borrower LastName] ,[Borrower Email] ,[Home Phone] ,[Cell Phone] ,[Current Street Address] ,[City] ,[State] ,[Zip]
解决方案
您将来自两个数据源的记录合并在一起,并且您的部分要求是知道记录来自哪个源(仅当来自员工源时 ID 列是否为 NULL)。关于记录是否来自“员工来源”的唯一线索是列中的值是否在两者之间存在差异([婚姻状况]、[出生日期]、[YearsAtThisAddress]),但您没有说如果这些中的任何一个可以为空,那么我们必须做出一个假设。假设列中的值[YearsAtThisAddress]
可用于确定记录的来源(NOT NULL
表示“员工”,而NULL
表示“销售”),您可以执行类似的操作以在“员工”时为 SSN 上匹配的记录返回相应的“销售”ID 号ID 号为 NULL。
SELECT
CASE WHEN ID IS NULL AND [YearsAtThisAddress] IS NOT NULL
THEN (SELECT TOP (1) ID
FROM [Mortgage]
WHERE [YearsAtThisAddress] IS NULL
AND ID IS NOT NULL
AND [SSN] = m.[SSN]
ORDER BY ID)
ELSE ID
END AS ID,
[SSN],
[Borrower FirstName], [Borrower LastName],
[Borrower Email], [Home Phone], [Cell Phone],
[Marital Status], [Date of Birth],
[Current Street Address], [City], [State], [Zip],
[YearsAtThisAddress], [Sex], [Ethnicity], [Race]
FROM
[Mortgage] AS m
推荐阅读
- reactjs - 对象访问后变成字符串
- javascript - JS如何防止对象被访问
- android-studio - 我们如何在 android lint 检查代码中获取根项目路径?
- if-statement - x86 使用 .IF 、 .ELSE 和 .ELSEIF 比较两个数字
- python - 使用Pyrogram注册新手机号账号时,手机收不到短信验证码?
- kubernetes - Pod 之间的 AKS 内部通信不起作用
- java - 我应该如何映射器接收正确的值
- google-colaboratory - 将“jk”重新映射到
在 Google Colab Vim 中 - java - 缺少 Netbeans JavaFX 运行时组件,需要运行此应用程序
- c++ - 更改配置时,Visual Studio 2019 永远解析 cmake