2015-01-26 2 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. Водители-лицензия-No
  2. Social-Security-No
  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 

IS это возможно? Если да, то какой 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

+0

. Как можно было бы создать второй столбец, содержащий тип вычисляемого идентификатора (DL-No, SS-No или State-Id-No) – webworm

+0

@webworm. , , Вы должны использовать 'alter table' и' update'. –

Смежные вопросы