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 | ?
我知道选择标识符的顺序...
- 驾照号码
- 社保-无
- 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
的语法。
我有一个 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 | ?
我知道选择标识符的顺序...
- 驾照号码
- 社保-无
- 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
的语法。