|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Диапазон номеров в одну строку
Добрый вечер. Есть неразрешимая для меня задача, прошу вашей помощи. Таблица в БД (Акцесс) содержит информацию о бланках строгой отчетности. Выглядит так:
Код:
ID Num Vid Num_Reg 1 VBA0123 Бланк1 10 2 VBA0124 Бланк1 10 3 VBA0125 Бланк1 4 VBA0126 Бланк1 10 5 VBA0127 Бланк1 10 6 VB0111 Бланк2 10 7 VB0112 Бланк2 10 8 VB0113 Бланк2 10 Бланк1 VBA0123 - VBA0124 Бланк1 VBA0126 - VBA0127 Бланк2 VB0111 - VB0113 например a:= Бланк1 VBA0123 - VBA0124 b:= Бланк1 VBA0126 - VBA0127 c:= Бланк2 VB0111 - VB0113 p.s. номер не обязательно состоит из 3 букв и цифр. Последний раз редактировалось DOR, 11.04.2013 в 17:02. |
#2
|
||||
|
||||
Через Group By можно.
Или двойным подселектом. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Помогите пожалуйста кодом на данном примере. Как я написал, мне это никогда не написать.
|
#4
|
|||
|
|||
Ну, я бы попробовал так:
Код:
select vid, min(Num) || ' - ' || max(Num) from Table where Num_Reg = 10 group by vid Конкатенация может сразу не пройти, тогда надо будет сделать view просто с min и max, а уже из нее простым селектом с конкатенацией. |
#5
|
||||
|
||||
Можно же без вьюхи, чисто подселект сделать.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
|||
|
|||
M.A.D.M.A.N., lmikle
Я понимаю что для Вас решение очевидно, но для меня это не разрешимо. Может быть кто нибудь может написать код под ключ, если не за спасибо, то умеренную плату (в ЛС). з.ы. Если сообщение не уместно в танной теме прошу перенести в работу. Спасибо. з.ы. Код:
select vid, min(Num) || ' - ' || max(Num) from Table where Num_Reg = 10 group by vid |
#7
|
||||
|
||||
Боюсь тут в лоб селектами не выйдет. И Min,Max тут как мертвому припарка. Тут скорее всего придется писать функцию возвращающую последний номер в последовательности начинающейся с заданного значения. (Во завернул ) А вот что является последовательностью вам и надо будет в функции описать. Для меня пока не очень ясно например какой номер будет следовать после VBA9999.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
|||
|
|||
Цитата:
По представленной схеме данных этот селект вернет ровно то, что ТС просит. Если это не так, то нужно более точное описание задачи. |
#9
|
||||
|
||||
Предложеный вариант будет работать правильно только с непрерывной последовательностью, а у автора есть разрыв в ней и потому Min(), Max() не катят. Этот запрос вернет 2 строчки т.к. не учитывает разрыва, а нужно вернуть 3.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
|||
|
|||
Это да. Тогда проще кодом сделать.
|
#11
|
|||
|
|||
Цитата:
Номер состоит из серии (VBA) и номера (0001). VBA9999, это последний номер в "партии". Потом будет VBB0001 до VBB9999 и так далее. Соответственно договора с серией VBB будут следующей строкой. Но напрактике за 3 года не было еще случаев когда не хватало номера. Думал тема безнадежно потеряна. Последний раз редактировалось DOR, 12.04.2013 в 14:04. |