首页 > 解决方案 > SQL - 合并两列,优先选择其中之一,同时记录原始源

问题描述

我有一张表格,上面有两种可供选择的付款数据来源。例如

ID    Source1_2004   Source1_2005   Source2_2004    Source2_2005 
 1           15004          14045           NULL           14545
 2            NULL           9004          46789            4555
 3            3334           NULL           4555            NULL

我需要合并这些,如果 Source1 可用,则保留它们,但如果 Source1 为 NULL,则用 Source2 替换。我还想创建新的专栏,说明最终付款数字的来源。例如,基于上述的新表如下所示:

ID    Payment_2004    Payment_2005    Source_2004    Source_2005
 1           15004           14045        Source1        Source1
 2           46789            9004        Source2        Source1
 3            3334            NULL        Source1           NULL

我一直在尝试使用带有 IS NULL 的 CASE WHEN 来创建新的 Payment 列,并查看新的 Payment 列是否与 Source1 或 Source2 匹配以创建新的 Source 列。但是,由于数据中的 NULLS 破坏了逻辑,并且没有给出相同的结果,我遇到了麻烦。

非常感谢任何帮助。

标签: sql-servercaseisnull

解决方案


你需要这样的东西:

SELECT ID
    , Payment_2004 = ISNULL(Source1_2004,Source2_2004)
    , Payment_2005 = ISNULL(Source1_2005,Source2_2005)
    , Source_2004 = CASE WHEN Source1_2004 Is NOT Null THEN 'Source1' 
        WHEN Source2_2004 Is NOT Null THEN 'Source2' ELSE 'No Source' END
    , Source_2005 = CASE WHEN Source1_2005 Is NOT Null THEN 'Source1' 
        WHEN Source2_2005 Is NOT Null THEN 'Source2' ELSE 'No Source' END
FROM YourTable;

推荐阅读