sql - 如何确定 COALESCE 运算符成功选择了哪一列/值?

标签 sql sql-server tsql sql-server-2000 coalesce

我有一个表,我希望从 Col1 开始,然后到 Col2,然后到 Col3 的每个 ID 的 3 个(且只有 3 个)列中找到第一个非空值

注意:Col3 绝不为 NULL

ID    Col1    Col2    Col3
------------------------------
1     A       B       X
2     NULL    C       X
3     NULL    NULL    X
4     D       NULL    X

为了获取每个值的正确列,我使用以下 SQL Select

SELECT    ID,
          COALESCE(Col1, Col2, Col3) AS Col
FROM      MyTable

它返回以下内容并且工作正常

ID    Col
-------------
1     A
2     C
3     X
4     D

我想要的是返回的第三列,指示合并在哪一列上成功。以下是我希望生成的结果集:

ID    Col    Source
-----------------------
1     A      Col1
2     C      Col2
3     X      Col3
4     D      Col1

最佳答案

也许这会起作用?

SELECT    ID,
          COALESCE(Col1, Col2, Col3) AS Col,
          CASE COALESCE(Col1, Col2, Col3)
              WHEN Col1 THEN 'Col1'
              WHEN Col2 THEN 'Col2'
              WHEN Col3 THEN 'Col3'
              ELSE 'Unknown'
          END AS Source
FROM      MyTable

关于sql - 如何确定 COALESCE 运算符成功选择了哪一列/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917388/

相关文章:

sql - 从 SQL 中读取另存为文本的 XML

sql - "Cluster"SQL 中的代码帮助

sql - 如何在 Talend 中使用一个输入查询多个表?

c# - Linq 帮助 - Sql trace 返回结果,但 datacontext 返回 null

mysql - 根据Microsoft SQL Server中其他表中的行的位置排列一个表的列

sql - 多级父子关系

sql - 从一个表中选择行并插入到另一表中

c# - 动态连接/基于表达式的连接字符串 SSRS

c# - 让 SqlBulkCopy 接受列名

json - 使用 FOR JSON 和 CTE 并将其存储在变量中