sql-запрос для отображения диапазона и учета пропущенных чисел

У меня есть SQL-запрос

SELECT 
    Group_Id, MIN(Rec_Number) as RecStart, MAX(Rec_Number) AS RecEnd
FROM
    Rec
WHERE
    Group_Id != '' 
GROUP BY
    Group_Id
ORDER BY 
    Group_Id

Это приводит к следующим результатам.

92-2274 9222740001  9222740004
92-2275 9222750001  9222750026
etc...

Однако если запись 3 отсутствует(например, в первой строке), запрос явно не учитывает ее. Я пытаюсь сделать следующее

92-2274 9222740001  9222740002
92-2274 9222740004  9222740018
92-2275 9222750001  9222750016
92-2275 9222750018  9222750026
etc...

Таким образом, по существу каждый раз, когда сценарий видит запись, отсутствующую внутри группы, он начинает новую строку, оставаясь внутри группы, прежде чем повторять следующую группу. group_IdЭто конечно первые 6 цифр rec_Number

Я также хотел бы сделать это, а также

92-2274       0001        0002
92-2274       0003        0004

Или даже обрезать его и удалить ведущие 0, а также, если это возможно, я знаю об использованииRight (Rec_Number, 4), однако, как это поплавок автоматическое преобразование в строку, кажется, что-то испортить, как я получаю +009 много столбцов, поэтому я предполагаю, что мне нужно бросить первый или что-то. Эта конкретная функция я мог бы сделать это Excel после того, как я думаю, но я уверен, что SQL может сделать это, если парень, пишущий запрос, был DBA, а не неуклюжим администратором сервера (это я!)

So is there a way of doing that in SQL also I must warn you that the standard CTE or using functions such as row number don’t work as this is SQL Server 2000-yes it is that old!

Поэтому я изо всех сил пытаюсь найти сообщения о переполнении стека, которые применяются. Многие из них начинаются с ключевого слова WITH, что означает, что я не могу использовать ни один из них, чтобы начать с!

Я думаю, что мне нужен блок IF ELse, но я не уверен, какой метод я могу использовать, чтобы получить запрос для создания новой строки каждый раз, когда он попадает в отсутствующий параллельный номер в диапазоне групп.

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

1 ответ

  1. Для второй части это должно работать :

    RIGHT ( CAST ( MIN (Rec_Number) as Decimal(10)), 4)
    

    Он будет держать только последние 4 символа вашего номера.