Подскажите как обновить таблицу с автоматическим заполнением
-
- Активный участник
- Сообщения: 232
- Зарегистрирован: 10 мар 2012, 07:59
- Репутация: 4
- Откуда: Новосибирск
Подскажите как обновить таблицу с автоматическим заполнением
Имеется таблица (допустим поля id, name, type) в поле name содержится множество значений типа (д/с №4, д/с Мишутка, школа 5, школа 46 и тд) в поле type они объединены в общие названия типа (д/с и школы). Нужно присвоить в автоматическом режиме всем садикам (поле type) номер 1, всем школам номер 2, всем магазинам свой единый номер и тд для других объектов. RowId нумерует все по порядку сквозной нумерацией Как же решить проблему. Объектов около 400 штук. Сейчас сортирую таблицу по полю Type и присваиваю номера вручную, а кое где через обновить таблицу. Вообще не дело...
-
- Интересующийся
- Сообщения: 32
- Зарегистрирован: 09 окт 2014, 10:59
- Репутация: 5
Re: Подскажите как обновить таблицу с автоматическим заполне
Настройки -> показать окно mapbasic ->
select * from Untitled where name like "%школа%"
update Selection Set type="1"
select * from Untitled where name like "%д/с%"
update Selection Set type="2" и т.д.
где Untitled - имя таблицы
после каждой строки нажимать "Enter"
ну или можете таблицу здесь прикрепить
select * from Untitled where name like "%школа%"
update Selection Set type="1"
select * from Untitled where name like "%д/с%"
update Selection Set type="2" и т.д.
где Untitled - имя таблицы
после каждой строки нажимать "Enter"
ну или можете таблицу здесь прикрепить
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Подскажите как обновить таблицу с автоматическим заполне
Если подстрока, определяющая тип, находится в начале поля name, достаточно сортировать таблицу по полю name, чтобы визуально определить имеющиеся типы: подряд будут идти записи с именами, начинающимися с "д/с", "магазин", "школа" и др.
Если оставаться в рамках MapInfo, для каждого типа делаем выборку: ( Если ключевая подстрока может находиться в произвольном месте ("неизвестная школа", "новый д/с"), вместо функции Left$() используем InStr(). )
Далее обновляем поле type для выборки: Более быстрым может быть альтернативное решение — использование электронных таблиц. Если значения name могут дублироваться, придётся заполнить поле id уникальными значениями (RowID). Экспортируем таблицу в CSV. Откроем CSV каким-нибудь экселем. Отсортируем таблицу по полю name. Ткнём в ячейку правее "д/с ..." и введём "=1". Подведём указатель мыши к правому нижнему углу ячейки и растащим значение "1" по всем детским садикам. Аналогично присваиваем значение другим типам. Сохраняем CSV, закрываем эксель. Открываем CSV в MapInfo. Объединяем исходную таблицу и CSV по полю id (или name, если значения name уникальны). Готово.
Если оставаться в рамках MapInfo, для каждого типа делаем выборку: ( Если ключевая подстрока может находиться в произвольном месте ("неизвестная школа", "новый д/с"), вместо функции Left$() используем InStr(). )
Далее обновляем поле type для выборки: Более быстрым может быть альтернативное решение — использование электронных таблиц. Если значения name могут дублироваться, придётся заполнить поле id уникальными значениями (RowID). Экспортируем таблицу в CSV. Откроем CSV каким-нибудь экселем. Отсортируем таблицу по полю name. Ткнём в ячейку правее "д/с ..." и введём "=1". Подведём указатель мыши к правому нижнему углу ячейки и растащим значение "1" по всем детским садикам. Аналогично присваиваем значение другим типам. Сохраняем CSV, закрываем эксель. Открываем CSV в MapInfo. Объединяем исходную таблицу и CSV по полю id (или name, если значения name уникальны). Готово.
The purpose of computing is insight, not numbers
-
- Активный участник
- Сообщения: 170
- Зарегистрирован: 06 дек 2011, 07:21
- Репутация: 19
- Откуда: г. Ухта, республика Коми
Re: Подскажите как обновить таблицу с автоматическим заполне
Полностью согласен с предыдщими оратороми 
Как вариант
Запрос->Выбрать... заданная таблица, согласно условию: name like ("%д/с%") Результат в таблицу SELECT,
Таблица-> обновить колонку...
Ну это, типа, стандартными средствами, без высшей математики MapBasic'а

Как вариант
Запрос->Выбрать... заданная таблица, согласно условию: name like ("%д/с%") Результат в таблицу SELECT,
Таблица-> обновить колонку...
Ну это, типа, стандартными средствами, без высшей математики MapBasic'а
_____________________________________________
старый и дремучий, но всё же искренне ваш - Йети
старый и дремучий, но всё же искренне ваш - Йети
-
- Активный участник
- Сообщения: 232
- Зарегистрирован: 10 мар 2012, 07:59
- Репутация: 4
- Откуда: Новосибирск
Re: Подскажите как обновить таблицу с автоматическим заполне
Согласен с советами, уже и выбрал все что нужнно через like, и отсортировал (через утилитку) не просто таблицу. Обновлять же типовые значения вручную мне не хочется. бывает что встречается 40 одинаковых уникальных значений, им еще можно присвоить единый номер через Update Selection Set ID = 2 через строку basic (так намного быстрее чем вызывать меню), но могут встретиться и 10-40 объектов уникальных разного типа, и что мне их вручную нумеровать. А если что то поменяется... Понятно что выбираешь после места вставки до конца объекты RowId+1, но нумеровать все как то долго и "непрофессионально"
- ginpetr
- Завсегдатай
- Сообщения: 385
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Подскажите как обновить таблицу с автоматическим заполне
Update tabname set number=1*int(type=any("школа","детсад",...))+2*int(type=any("магазин","аптека",...)+3*...
Можно так сделать или в этом роде. Аможно не обновлять совсем. Подозреваю, что номера Вам нужны для подписей. Если так то эту формулу можно вписать прямо в подписи и не париться с обновлением- ведь данные могут поменяться и придётся заново обновлять.
Можно так сделать или в этом роде. Аможно не обновлять совсем. Подозреваю, что номера Вам нужны для подписей. Если так то эту формулу можно вписать прямо в подписи и не париться с обновлением- ведь данные могут поменяться и придётся заново обновлять.
-
- Активный участник
- Сообщения: 232
- Зарегистрирован: 10 мар 2012, 07:59
- Репутация: 4
- Откуда: Новосибирск
Re: Подскажите как обновить таблицу с автоматическим заполне
Кстати, вариант предложен отличный, можно составить такое выражение для обновления, а уникальные значения получить запросом, и потом соединить это все в том же Exel и полученный запрос закинуть в MapInfo
-
- Активный участник
- Сообщения: 232
- Зарегистрирован: 10 мар 2012, 07:59
- Репутация: 4
- Откуда: Новосибирск
Re: Подскажите как обновить таблицу с автоматическим заполне
Ура, решение найдено, решение банальное, точное и самое главное простое. Выбираем с группировкой по типу, копируем в эксель, присваиваем номера, открываем в мапинфо, обновляем с объединением. ВОТ И ВСЕ ДЕЛОВ ТО
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Подскажите как обновить таблицу с автоматическим заполне
это решение ничем не хуже других, т.к. подразумевает, что вы классификатор (или словарь) не держите в уме, а хотя бы один раз его набиваете. НО с тем же успехом можно было и сэкономить пару-тройку операций, просто сохранив групповой запрос как родную таблицу в мапинфо. Которую потом и заполнить.nikomuro писал(а):Ура, решение найдено, решение банальное, точное и самое главное простое. Выбираем с группировкой по типу, копируем в эксель, присваиваем номера, открываем в мапинфо, обновляем с объединением. ВОТ И ВСЕ ДЕЛОВ ТО
-
- Активный участник
- Сообщения: 232
- Зарегистрирован: 10 мар 2012, 07:59
- Репутация: 4
- Откуда: Новосибирск
Re: Подскажите как обновить таблицу с автоматическим заполне
впринципе можно было сделать и так, на самом деле сокращается путь на два действия, даже на три
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя