2014-12-11 2 views
0

Мне нужно сгруппировать своих клиентов, чтобы сказать 3 группы в соответствии с их почтовым индексом.Можно ли выбрать столбец, основанный на предыдущем случае столбца

В БД клиента имеется 2 поля, которые могут содержать почтовый индекс.

Улица Адрес Zip является первичной, а почтовый адрес используется, если пользователь не указал адрес Zip для адреса улицы.

Несколько раз оба являются значениями NULL и возможны недопустимые значения.

Так что сначала нужно получить ZIP с сазе:

случай когда streetAddress.zip IS не NULL и streetAddress.zip между '0' и '99999', то streetAddress.zip когда PostalAddress. застежка-молния не является NULL и postalAddress.zip между «0» и «99999», то postalAddress.zip еще NULL конец ) «салонов почтовый»,

Но теперь я хочу в следующем столбце, чтобы выбрать на основе «Postcode», но кажется, что использовать значение из предыдущего столбца невозможно.

Somthing как случай , когда Почтовый индекс состоит между «00000» и «33333», то «Zone1» , когда Почтовый индекс состоит между «33334» и «66666», то «Zone2» , когда Почтовый индекс состоит между «66669» и ' 99999 'then' Zone3 ' end

В конце я пытаюсь сделать представление, которое затем будет содержать значение PostCode и Zone.

+0

COALESCE (AddressZip, PostalZip)? – jarlh

+0

Примечание: вы действительно хотите создать таблицу (и, возможно, связанное, материализованное представление), чтобы иметь дело с преобразованием диапазона zip-> zone. Это делает тривиальным обновление (нет необходимости касаться запросов, которые делают преобразование), и может даже полностью предотвратить определенные типы ошибок конфигурации (т. Е. Перекрывающиеся диапазоны). –

ответ

0

Почему бы просто не использовать подзапрос?

select . . . 
from (select c.*, 
      (case when streetAddress.zip IS not NULL and streetAddress.zip between '0' and '99999' 
        then streetAddress.zip 
        when postalAddress.zip IS not NULL and postalAddress.zip between '0' and '99999' 
        then postalAddress.zip 
        else NULL 
       end) as PostCode 
     from . . . 
    ) c 

Вы можете использовать столбец PostCode во внешнем select.

0

Вы должны повторить весь код из первого случая, если вы хотите его в одном запросе, но вы можете использовать CTE, чтобы выбрать все данные с первым случаем, а затем все от этого и применить второй случай.

0

, если вы хотите, чтобы все в одном запросе попытаться повторно использовать оператор случай и SQL выглядит, как показано ниже или вы можете использовать подзапрос

select 
(case 
    when streetAddress.zip IS not NULL and streetAddress.zip between '0' and '99999' then streetAddress.zip 
    when streetAddress.zip IS NULL and postalAddress.zip IS not NULL and postalAddress.zip between '0' and '99999' then postalAddress.zip 
    else NULL 
end) AS [PostCode], 
(case 
    when streetAddress.zip IS not NULL and streetAddress.zip between '0' and '99999' then 
    <GroupA: Your Logic to get the column based on the value 'streetAddress.zip'> 
    when streetAddress.zip IS NULL and postalAddress.zip IS not NULL and postalAddress.zip between '0' and '99999' then 
    <GroupB: Your Logic to get the column based on the value 'postalAddress.zip'> 
    else <GroupC:> 
end) AS [PostCodeDependentColumn] 
From .... 
Смежные вопросы