sql-server - 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 破坏了逻辑,并且没有给出相同的结果,我遇到了麻烦。
非常感谢任何帮助。
解决方案
你需要这样的东西:
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;
推荐阅读
- flutter - Flutter Drop DownMenuItem 小部件
- excel - 如何获取类型图标集条件格式的名称
- mysql - 如何将 MySQL 5.x 绑定到 IP 和 localhost?
- import - 无法在 python 中导入 matlab.engine
- mysql - 带有别名列的 MySQL DATEDIFF
- c - 创建2个交替的子进程
- haskell - Haskell 中的 type 关键字是什么
- node.js - 如何在nodejs中修剪我的json文件并全部降低
- flutter - 按下按钮获取数据
- docfx - 在 DocFX markdown frontmatter / YAML header 中使用标签