Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2013, 14:38   #1
Валенсия34
Пользователь
 
Регистрация: 01.10.2012
Сообщений: 15
По умолчанию пропуск значений

Хочу вывести список пропущенных кодов, запрос срабатывает не совсем корректно выводит не все пропущенный коды, например: 1, 3, 4, 6, 9,10;
находит: 2, 5, 7;
8 игнорирует, т.е выводит только одно из пропущенных, если пропущена последовательность. Как исправить?

SELECT ClientID+1 as [Пропущенные коды]
FROM [System].[dbo].[Clients]
WHERE ClientID+1 NOT IN
(SELECT ClientID FROM [System].[dbo].[RFS_Clients])
Валенсия34 вне форума Ответить с цитированием
Старый 06.05.2013, 15:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Интервалы пропущенных кодов можно, например, так получить
Код:
SELECT T.ClientID+1 AS BegId,T.NextId-1 AS EndId
  FROM (
    SELECT 0 AS ClientID,MIN(C2.ClientID) AS NextId FROM Clients C2
    UNION
    SELECT C1.ClientID,(SELECT MIN(C2.ClientID) FROM Clients C2 WHERE C2.ClientID>C1.ClientID) AS NextId FROM Clients C1) T
  WHERE T.ClientID<(T.NextId-1)
Что бы получить не в виде интервалов, а непосредственно пропущенные значения, нужно лезть в дебри рекурсивных запросов. По другому пожалуй никак
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.05.2013, 14:30   #3
Валенсия34
Пользователь
 
Регистрация: 01.10.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Интервалы пропущенных кодов можно, например, так получить
Код:
SELECT T.ClientID+1 AS BegId,T.NextId-1 AS EndId
  FROM (
    SELECT 0 AS ClientID,MIN(C2.ClientID) AS NextId FROM Clients C2
    UNION
    SELECT C1.ClientID,(SELECT MIN(C2.ClientID) FROM Clients C2 WHERE C2.ClientID>C1.ClientID) AS NextId FROM Clients C1) T
  WHERE T.ClientID<(T.NextId-1)
Что бы получить не в виде интервалов, а непосредственно пропущенные значения, нужно лезть в дебри рекурсивных запросов. По другому пожалуй никак
Спасибо! поняла вас)
Валенсия34 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропуск ненужных ячеек energizeron Microsoft Office Excel 5 23.02.2012 15:06
Пропуск строки[C++] xPAL Помощь студентам 0 29.11.2011 15:50
Пропуск ошибки и вызов модуля cfvbh Microsoft Office Excel 5 01.04.2011 17:50
Пропуск строк программы (Си) persalena Помощь студентам 10 21.02.2009 20:27
Пропуск условия if. Delphi 7 Дикий Помощь студентам 11 12.05.2008 22:49