2016-11-04 2 views
0

у меня есть 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 мог бы это сделать, если бы парень, пишущий запрос, был администратором базы данных, а не неуклюжим администратором сервера (это я!)

Так есть ли способ сделать это в SQL также я должен предупредить вас, что стандартный CTE или использование таких функций, как номер строки, не работает, так как это SQL Server 2000 - да, это так!

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

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

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

+0

SQL server 2000, но я использую SSMS 2014, база данных MS SQL 2000 –

+0

Обновите свою базу данных. Вы используете базу данных, которая не поддерживается с апреля 2013 года. Время для обновления! –

+0

Мне жаль, что я не могу доверять мне, но сейчас у меня нет такого варианта, как его не мое программное обеспечение. –

ответ

0

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

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

Это будет только сохранить последние 4 цифры своего номера.

+0

Привет, я получил арифметическую ошибку, но мне удалось использовать –

+0

RIGHT (CAST (MIN (Rec_Number) как десятичный (10)), 4) –

+0

Спасибо за ваш код, хотя я думаю, что столбец поплавок, поэтому он вышел из диапазона. Мне кажется, что я должен был использовать –

Смежные вопросы