Як об'єднати мітки в QGIS?


14

Я використовую QGIS 1.8 на машині Windows XP і намагаюся зробити об'єднання декількох полів, щоб позначити назви моїх місцевих доріг у таблиці атрибутів, але я не можу знайти правильний синтаксис. Перше поле складається з вулиці, другий тип зв'язку, наприклад: проспект і третя орієнтація, наприклад, на схід чи захід. Чи можете ви сказати мені, як написати правильний синтаксис, використовуючи діалогове вікно міток на основі формули. Додано скріншот, який показує таблицю атрибутів.

введіть тут опис зображення

Відповіді:


19

Оператор конкатенації є ||(дивним, так?), Тож ви використовуєте щось на кшталт:

street || ', ' || link || ', ' || orientation

Інтерпресуйте їх будь-якими роздільниками та статичними рядками, які вам подобаються.

Як зазначав @NathanW, це не вдасться, якщо будь-яке з полів NULL, але ви можете використовувати резервне значення в цьому випадку:

street || ', ' || CASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END || ', ' || orientation

QGIS підтримує функцію помічника coalesceз версії 2.0. Саме там можна уникати проблем з NULL, і приклад виглядає так:

 street || ', ' || coalesce(link, '(nodata)') || ', ' || orientation

2
Існує також concatфункція у версіях розробників. Використання || не обробляє NULL, якщо linkNULL, ця мітка є нульовою, concatце не має проблеми. || взято з Postgres postgresql.org/docs/9.1/static/functions-string.html
Nathan W

Схоже, він не підтримує твердження справи безпосередньо. Є єдиний варіант без використання SQL безпосередньо для створення не-NULL копії стовпця посилань?
lynxlynxlynx

Що ви маєте на увазі, не підтримує заяви про справи?
Натан В

3
Вам не вистачає END. Правильна рядокCASE WHEN ("link" IS NULL) THEN '(nodata)' ELSE "link" END
Nathan W

1
ах, coalesceце те, що я мав на увазі.
Nathan W

2

На QGIS veriosn 2.0.1 простий вираз спрацював так:

"поле1" || '(' || "field2" || ')'

бажаний вихід: field1 (field2)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.