field calculator - if...
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
field calculator - if...
Есть 2 исходных текстовых поля (A, B) и пустое конечное (С). Данные "A" и "В" есть не для всех записей. В "C" нужно записать значение "A", если оно есть, и если нет - записать "В", если оно есть. Ничего нет - ничего не пишем в "C". Подскажите, пожалуйста, синтаксис (Arc/gv/Q). Спасибо.
UPD:Поправил опечатку.
UPD:Поправил опечатку.
Последний раз редактировалось oleg 24 авг 2011, 15:23, всего редактировалось 1 раз.
-
- Гуру
- Сообщения: 879
- Зарегистрирован: 17 июн 2010, 23:14
- Репутация: 207
- Откуда: Москва
Re: field calculator - if...
Видимо:
Что-то на ум приходит только самое простое, а-ля:
В этом случае в обновляемую колонку запишется значения A и за ними значения B. Если A пустое, то запишется только B и наоборот. Если оба заполнены, то запишется и то и другое.
Хотя я всё-таки что-то не так понял =)
Записать необходимо B, если нету А. А то вроде как C пустая...записать "С", если оно есть.
Что-то на ум приходит только самое простое, а-ля:
Код: Выделить всё
[A]&[B]
Хотя я всё-таки что-то не так понял =)
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
Re: field calculator - if...
Да, поправил выше, спасибо.Slinger писал(а):Видимо:
Записать необходимо B, если нету А. А то вроде как C пустая...
Нужна запись в порядке приоритета, вариант со всеми значениями к сожалению не подходит...
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: field calculator - if...
Не знаю точно, как в "Arc/gv/Q", но я создал подобную таблицу в GRASS (в DBF)
Делаем два запроса:
Получается так:
В QGIS в "калькуляторе полей" не смог это повторить.
Код: Выделить всё
cat|A|B|C
1|a|b|
2|aa||
3|aaa|bb|
4|aaaa||
5||bbbb|
6|aaaaa|bbb|
7||bbbbbb|
8|||
9|||
Код: Выделить всё
echo "UPDATE vector SET C = A WHERE (A NOT NULL)" | db.execute
echo "UPDATE vector SET C = B WHERE (A IS NULL) AND (B NOT NULL)" | db.execute
Получается так:
Код: Выделить всё
cat|A|B|C
1|a|b|a
2|aa||aa
3|aaa|bb|aaa
4|aaaa||aaaa
5||bbbb|bbbb
6|aaaaa|bbb|aaaaa
7||bbbbbb|bbbbbb
8|||
9|||
Последний раз редактировалось Александр Мурый 25 авг 2011, 11:53, всего редактировалось 2 раза.
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: field calculator - if...
Увлекся идеей заставить QGIS сделать вышеописанное. Создал такой же точечный слой в БД SpatiaLite, с помощью QspatiaLite не удалось (посыпались "ошибки SQL" + "error GeometryConstraints"). Поискал в сети -- говорят, какие-то траблы с версиями SpatiaLite и т.п.
Попробовал на "голом" SQLite:
-- работает 
Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Попробовал на "голом" SQLite:
Код: Выделить всё
UPDATE vector SET C = A WHERE (A IS NOT NULL);
UPDATE vector SET C = B WHERE (A IS NULL) AND (B IS NOT NULL);

Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 588
- Зарегистрирован: 30 мар 2009, 21:53
- Репутация: 55
- Откуда: Королев
Re: field calculator - if...
Сделайте это в питоновской консоли. Примерamuriy писал(а):Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: field calculator - if...
Спасибо, попробую. Понять бы, как написать нужное выражение на питоне...yellow_sky писал(а):Сделайте это в питоновской консоли. Примерamuriy писал(а):Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Редактор материалов, модератор форума
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя