【问题标题】:SQL for calculated column that chooses from value in own row从自己行中的值中选择的计算列的 SQL
【发布时间】:2015-01-27 03:56:18
【问题描述】:

我有一张表,其中可以存储一个人的几个标识符。在此表中,我想创建一个计算标识符列,根据可用的标识符存储该记录的最佳标识符。

例如(一些虚构的样本数据)....

Table = "公民"

Id | LastName | DL-No        | SS-No          | State-Id-No   | Calculated
------------------------------------------------------------------------
1  | Smith    | NULL         | 374-784-8888   | 7383204848    | ?
2  | Jones    | JG892435262  | NULL           | NULL          | ?
3  | Trask    | TSK73948379  | NULL           | 9276542119    | ?
4  | Clinton  | CL231429888  | 543-123-5555   | 1840430324    | ?

我知道选择标识符的顺序...

  1. 驾驶执照号
  2. 社会保障号
  3. State-Id-No

所以我希望计算出的标识符列成为表架构的一部分。期望的结果是......

Id | LastName | DL-No        | SS-No          | State-Id-No   | Calculated
------------------------------------------------------------------------
1  | Smith    | NULL         | 374-784-8888   | 7383204848    | 374-784-8888
2  | Jones    | JG892435262  | NULL           | 4537409273    | JG892435262
3  | Trask    | NULL         | NULL           | 9276542119    | 9276542119
4  | Clinton  | CL231429888  | 543-123-5555   | 1840430324    | CL231429888

这可能吗?如果是这样,我将使用什么 SQL 来计算“计算”列中的内容?

我在想类似的东西..

SELECT
  CASE
    WHEN ([DL-No] is NOT NULL) THEN [DL-No]
    WHEN ([SS-No] is NOT NULL) THEN [SS-No]
    WHEN ([State-Id-No] is NOT NULL) THEN [State-Id-No]
    AS "Calculated"
  END
FROM Citizens

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    最简单的解决方案是使用coalesce()

    select c.*,
           coalesce([DL-No], [SS-No], [State-ID-No]) as calculated
    from citizens c
    

    但是,我认为您的 case 语句也可以使用,如果您修复语法以使用 when 而不是 where

    【讨论】:

    • 如何创建包含计算标识符类型(DL-No、SS-No 或 State-Id-No)的第二列
    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2017-04-14
    • 2020-09-06
    相关资源
    最近更新 更多