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

Откуда: Азербайджан, г. Баку
Сообщений: 1382
есть таблица с номерами телефонов
нужен следующий результат

все номера телефонов имеющиеся в базе и все не имеющиеся, т.е.

200000 - 0
200001 - 0
200002 - NULL
26 июл 04, 13:13    [834701]     Ответить | Цитировать Сообщить модератору
 Re: запрос  [new]
Alexander Popov
Member

Откуда:
Сообщений: 663
Можно создать табличку со всеми возможными телефонами
(написать цикл с @t=@t+1) а потом Left oter join'ом посмотреть каких номеров не хватает.
26 июл 04, 13:18    [834724]     Ответить | Цитировать Сообщить модератору
 Re: запрос  [new]
Alexander Popov
Member

Откуда:
Сообщений: 663
Left outer
26 июл 04, 13:19    [834727]     Ответить | Цитировать Сообщить модератору
 Re: запрос  [new]
Samir
Member

Откуда: Азербайджан, г. Баку
Сообщений: 1382
это единственный выход?
26 июл 04, 13:26    [834768]     Ответить | Цитировать Сообщить модератору
 Re: запрос  [new]
ChA
Member

Откуда: Москва
Сообщений: 11127
Не единственный, но про генерацию непрерывной последовательности всем,
похоже, уже надоело отвечать, так как подобный вопрос поднимается с
периодичностью не реже недели. Как выше сказал Alexander Popov,
нужно сливать таблицу с непрерывной последовательностью по LEFT JOIN
с таблицей актуальных номеров. Непрерывная последовательность номеров
обычно моделируется с помощью CROSS JOIN, например, так
SELECT 10*t1.i + t2.i 
FROM (
  SELECT 0 AS i
  UNION ALL SELECT 1
  ...
  UNION ALL SELECT 9
) t1
CROSS JOIN (
  SELECT 0 AS i
  UNION ALL SELECT 1
  ...
  UNION ALL SELECT 9
) t2
...
Хорошей практикой считается иметь в БД таблицу натуральных чисел в
диапазоне от 0 и до, например, 999. Тогда пример выше будет проще
SELECT 10*t1.i + t2.i 
FROM  t1
CROSS JOIN t2
...
28 июл 04, 02:27    [840572]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить