Utilisation de l'instruction conditionnelle Elseif dans QGIS Field Calculator?


14

J'essaie d'écrire une instruction conditionnelle ELSEIF dans QGIS Field Calculator (version 1.8.0). J'ai utilisé un exemple que j'ai trouvé en ligne:

CASE WHEN val < 0 THEN 'negative'
  WHEN val = 0 THEN "neutral'
  ELSE 'positive'
END

J'ai modifié la déclaration comme suit:

CASE WHEN  "GRID_ID"  = 1 THEN 'complete'
  ELSEIF  "GRID_ID"  = 2 THEN "in progress'
  ELSE 'not started'
END

Cette instruction ne s'exécute pas, l'aperçu de sortie indique que l'expression n'est pas valide. Les informations les plus détaillées sont les suivantes: Erreur de l'analyseur: erreur de syntaxe, COLUMN_REF inattendu, en attendant WHEN ou ELSE ou END

Si quelqu'un a eu cette erreur, qu'avez-vous fait pour la corriger?

Réponses:


21

Vous avez quelques problèmes dans votre déclaration modifiée.

  • Utilisation incohérente de citations autour "in progress'
  • Vous n'avez pas besoin de guillemets autour des noms de colonnes.
  • Vous utilisez un "ELSEIF" alors qu'il devrait être un "QUAND".

Les éléments suivants devraient résoudre les trois problèmes et fonctionnent pour moi dans la version 1.8.0:

CASE WHEN GRID_ID = 1 THEN 'complete'
  WHEN GRID_ID = 2 THEN 'in progress'
  ELSE 'not started'
END

2
"Vous n'avez pas besoin de guillemets autour des noms de colonnes." Vous ne le faites pas, mais je le recommanderais quand même, car cela aidera le surligneur de syntaxe à marquer cette partie comme une colonne.
Nathan W

@NathanW - le surligneur Syntax marque les noms des colonnes en rouge, que vous utilisiez des guillemets ou non, du moins c'est le cas dans mon installation 1.8.0.
GIS-Jonathan

1
C'est effectivement le cas. C'est assez embarrassant, j'aurais dû savoir que ça fait comme j'ai écrit le surligneur;)
Nathan W

@NathanW - Compréhensible. Après tout, je me souviens à peine de ce que j'ai écrit hier. ;-)
GIS-Jonathan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.