2015-01-26 3 views
0

개인의 여러 indentifier를 저장할 수있는 테이블이 있습니다. 이 표에서 어떤 식별자가 사용 가능한지에 따라 해당 레코드에 대한 최상의 식별자를 저장하는 단일 계산 된 식별자 열을 만들고 싶습니다. 예를 들어자체 행의 값에서 선택하는 계산 열의 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-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 

답변

5

가장 쉬운 해결책은 coalesce() 사용하는 것입니다 그러나

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

를, 난 당신이 구문을 수정 경우 case 문이 또한 작동합니다 생각 where 대신 when을 사용하십시오.

+0

고든에게 감사드립니다. SQL을 편집했습니다 – webworm

+0

계산 식별자 (DL-No, SS-No 또는 State-Id-No) – webworm

+0

@webworm 유형이 포함 된 두 번째 열을 만드는 방법은 무엇입니까? . . 'alter table'과'update'를 사용해야합니다. –