Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка с приоритетом в одном запросе  [new]
RuCosinus
Member

Откуда:
Сообщений: 67
Добрый день.

Имеем таблицу контактов клиентов в виде(упрощенно) ID, ContactTypeID, ClientID, Content
Где
ID - порядковый номер
ContactTypeID - это тип контакта (мобильный, домашний, e-mail и т.д.)
ClientID - ID клиента в другой таблице
Content - собственно само значение

Пример:

1 | 8 | 123008 | +7 (926) 120 - 00 - 00
2 | 2 | 001587 | ivanov@poshta.ru

Вопрос в следующем - возможно ли в одном запросе и без использования временных таблиц выбрать то или иное значение поля Content в зависимости от некоего приоритета. Чуть подробнее: при наличии контакта с мобильным телефоном, выводить его, если такого нет, то выводить домашний, если такого нет, то выводить рабочий и т.д. Приоритет получается по типу контакта, то есть по полю ContactTypeID.

Заранее спасибо.
2 дек 15, 13:36    [18502662]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
пронумеровать в соответствии с вашими приоритетами
И выбрать записи, получившие первые номера.
2 дек 15, 13:38    [18502692]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
RuCosinus
Member

Откуда:
Сообщений: 67
Небольшое уточнение, вдруг важно.

Сам запрос не сложный, но выборка происходит из кучи таблиц с десятком join, телефон - это всего лишь одно из большого кол-ва данных и одно из нескольких из конкретно этой таблицы.
2 дек 15, 13:41    [18502711]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
ГуЗы
Guest
RuCosinus,
А расставить приоритеты в таблице типов контактов?
2 дек 15, 14:00    [18502870]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
RuCosinus
Member

Откуда:
Сообщений: 67
ГуЗы,

к сожалению, таблицы неприкосновенны.
2 дек 15, 14:04    [18502920]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
RuCosinus
ГуЗы,

к сожалению, таблицы неприкосновенны.

Ну типов контактов же не миллион, думаю до 100 ни не доходит.
Раз таблицы не прикосновенные и временные таблицы не хочется, можно например использовать функцию/CTE/CASE
2 дек 15, 14:13    [18503006]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
LEFT JOINы + COALESCE
2 дек 15, 14:30    [18503126]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
RuCosinus
ГуЗы,

к сожалению, таблицы неприкосновенны.
Представление (VIEW) сделать, где расставить приоритеты.
2 дек 15, 14:36    [18503166]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
iap
LEFT JOINы + COALESCE

sic!
2 дек 15, 15:40    [18503683]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с приоритетом в одном запросе  [new]
RuCosinus
Member

Откуда:
Сообщений: 67
Всем большое спасибо.

Завтра буду пробовать применить подсказанный LEFT JOINы + COALESCE , сейчас уже сил нет :)
Пока же в качестве заплатки выбираю телефон отдельным мини-запросом вида
declare @phone varchar(255)
select top 1 @phone=Content 
from Contact 
where ClientID= @ClientID 
order by case when ContactTypeID=8 then 0 --мобильный
               when ContactTypeID=2 then 1 --домашний
               when ContactTypeID=1 then 2 --дополнительный
               when ContactTypeID=3 then 3 --рабочий 
               else 100 
          end
2 дек 15, 17:37    [18504325]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить