首页 > 解决方案 > 仅当列为空时插入值

问题描述

我有 2 个不同的 Excel 源

  1. 员工Excel源
  2. 销售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]

标签: sqlif-statementssiscase

解决方案


您将来自两个数据源的记录合并在一起,并且您的部分要求是知道记录来自哪个源(仅当来自员工源时 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

推荐阅读