Страница 1 из 1
field calculator - if...
Добавлено: 24 авг 2011, 01:06
oleg
Есть 2 исходных текстовых поля (A, B) и пустое конечное (С). Данные "A" и "В" есть не для всех записей. В "C" нужно записать значение "A", если оно есть, и если нет - записать "В", если оно есть. Ничего нет - ничего не пишем в "C". Подскажите, пожалуйста, синтаксис (Arc/gv/Q). Спасибо.
UPD:Поправил опечатку.
Re: field calculator - if...
Добавлено: 24 авг 2011, 12:18
Slinger
Видимо:
записать "С", если оно есть.
Записать необходимо B, если нету А. А то вроде как C пустая...
Что-то на ум приходит только самое простое, а-ля:
В этом случае в обновляемую колонку запишется значения A и за ними значения B. Если A пустое, то запишется только B и наоборот. Если оба заполнены, то запишется и то и другое.
Хотя я всё-таки что-то не так понял =)
Re: field calculator - if...
Добавлено: 24 авг 2011, 20:09
oleg
Slinger писал(а):Видимо:
Записать необходимо B, если нету А. А то вроде как C пустая...
Да, поправил выше, спасибо.
Нужна запись в порядке приоритета, вариант со всеми значениями к сожалению не подходит...
Re: field calculator - if...
Добавлено: 24 авг 2011, 23:27
Александр Мурый
Не знаю точно, как в "Arc/gv/Q", но я создал подобную таблицу в GRASS (в DBF)
Код: Выделить всё
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|||
В QGIS в "калькуляторе полей" не смог это повторить.
Re: field calculator - if...
Добавлено: 25 авг 2011, 11:51
Александр Мурый
Увлекся идеей заставить QGIS сделать вышеописанное. Создал такой же точечный слой в БД SpatiaLite, с помощью QspatiaLite не удалось (посыпались "ошибки SQL" + "error GeometryConstraints"). Поискал в сети -- говорят, какие-то траблы с версиями SpatiaLite и т.п.
Попробовал на "голом" 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)?
Re: field calculator - if...
Добавлено: 25 авг 2011, 12:07
yellow-sky
amuriy писал(а):Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Сделайте это в питоновской консоли.
Пример
Re: field calculator - if...
Добавлено: 25 авг 2011, 12:16
Александр Мурый
yellow_sky писал(а):amuriy писал(а):Интересно: так как проделать такое в QGIS (ну, кроме PostGIS)?
Сделайте это в питоновской консоли.
Пример
Спасибо, попробую. Понять бы, как написать нужное выражение на питоне...