SQL 对于从自己行中的值中选择的计算列

SQL for calculated column that chooses from value in own row

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

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

Table = "Citizens"

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

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

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 来计算 "Calculated" 列中的内容?

我在想类似的东西..

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

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

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

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