2015-01-26 53 views
0

我有一個可以存儲多個人的標識符的表。在這張表中,我想創建一個計算的標識符列,根據可用的標識符存儲該記錄的最佳標識符。用於從自己行中的值中選擇的計算列的SQL語句

例如(一些虛構樣本數據)....

表= 「公民」

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. 國家編號

所以我想計算的標識符列是表模式的一部分。期望的結果將是...

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 

回答

5

最簡單的解決方案是使用coalesce()

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

不過,我覺得你的case聲明也將工作,如果你解決語法使用when而不是where

+0

謝謝戈登。我編輯了SQL – webworm 2015-01-26 19:56:38

+0

如何創建包含計算標識符(DL-No,SS-No或State-Id-No) – webworm 2015-01-26 20:25:50

+0

@webworm類型的第二列。 。 。你應該使用'alter table'和'update'。 – 2015-01-26 23:46:06