[QGIS-it-user] Tabella attributi - Calcolatore campi

Buongiorno

Non riesco a capire perché non funziona la seguente sequenza di operazioni.

Devo aggiornare il campo unita in base ai valori del campo stringa.

Esempio: aggiorno il campo unita con valore 200 se il campo stringa=02

Uso la seguente sequenza:

Nella tabella attributi apro il Calcolatore di campi

Flag su Aggiorna campo esistente, scelgo il campo unita e nella espressione inserisco**:**

CASE WHEN “unita” IS NULL AND “stringa”=‘01’ THEN ‘100’ END

e ottengo quanto sotto riportato

Ora se eseguo la stessa sequenza con

CASE WHEN “unita” IS NULL AND “stringa”=‘02’ THEN ‘200’ END

Mi aggiorna il campo unita con 200 ma sostituisce anche i precedenti valori.

Perché ?

Ho provato a sostituire il campo NULL di unita con un valore qualsiasi e ripetere la sequenza ma non cambia

Grazie per ogni contributo

Franco Cazzola

Ciao,

Dalla documentazione: CASE è usato per valutare una serie di condizioni e restituisce un risultato per la prima condizione incontrata. Le condizioni sono valutate sequenzialmente, e se una condizione è vera, la valutazione si ferma, e il corrispondente risultato è restituito. Se nessuna delle condizioni è vera, è restituito il valore nella clausola ELSE.

prova con:

CASE WHEN “stringa”=‘02’ THEN ‘200’ WHEN “stringa”=‘01’ THEN ‘100’ ELSE NULL END

Il giorno mer 2 mar 2022 alle ore 11:07 Franco Cazzola <franco.cazzola@idroambiente.it> ha scritto:

Buongiorno

Non riesco a capire perché non funziona la seguente sequenza di operazioni.

Devo aggiornare il campo unita in base ai valori del campo stringa.

Esempio: aggiorno il campo unita con valore 200 se il campo stringa=02

Uso la seguente sequenza:

Nella tabella attributi apro il Calcolatore di campi

Flag su Aggiorna campo esistente, scelgo il campo unita e nella espressione inserisco**:**

CASE WHEN “unita” IS NULL AND “stringa”=‘01’ THEN ‘100’ END

e ottengo quanto sotto riportato

Ora se eseguo la stessa sequenza con

CASE WHEN “unita” IS NULL AND “stringa”=‘02’ THEN ‘200’ END

Mi aggiorna il campo unita con 200 ma sostituisce anche i precedenti valori.

Perché ?

Ho provato a sostituire il campo NULL di unita con un valore qualsiasi e ripetere la sequenza ma non cambia

Grazie per ogni contributo

Franco Cazzola


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Grazie Federico per la pronta risposta

Purtroppo ho circa 30 casi.

Spero che la lunghezza della istruzione CASE non sia limitata nel numero di caratteri

Ci sono altre soluzioni ?

Franco

image001.png

image002.png

···

Da: Federico Gianoli gianoli.federico@gmail.com
Inviato: mercoledì 2 marzo 2022 11:20
A: Franco Cazzola franco.cazzola@idroambiente.it
Cc: qgis-it-user@lists.osgeo.org
Oggetto: Re: [QGIS-it-user] Tabella attributi - Calcolatore campi

Ciao,

Dalla documentazione: CASE è usato per valutare una serie di condizioni e restituisce un risultato per la prima condizione incontrata. Le condizioni sono valutate sequenzialmente, e se una condizione è vera, la valutazione si ferma, e il corrispondente risultato è restituito. Se nessuna delle condizioni è vera, è restituito il valore nella clausola ELSE.

prova con:

CASE WHEN “stringa”=‘02’ THEN ‘200’ WHEN “stringa”=‘01’ THEN ‘100’ ELSE NULL END

Il giorno mer 2 mar 2022 alle ore 11:07 Franco Cazzola <franco.cazzola@idroambiente.it> ha scritto:

Buongiorno

Non riesco a capire perché non funziona la seguente sequenza di operazioni.

Devo aggiornare il campo unita in base ai valori del campo stringa.

Esempio: aggiorno il campo unita con valore 200 se il campo stringa=02

Uso la seguente sequenza:

Nella tabella attributi apro il Calcolatore di campi

Flag su Aggiorna campo esistente, scelgo il campo unita e nella espressione inserisco**:**

CASE WHEN “unita” IS NULL AND “stringa”=‘01’ THEN ‘100’ END

e ottengo quanto sotto riportato

Ora se eseguo la stessa sequenza con

CASE WHEN “unita” IS NULL AND “stringa”=‘02’ THEN ‘200’ END

Mi aggiorna il campo unita con 200 ma sostituisce anche i precedenti valori.

Perché ?

Ho provato a sostituire il campo NULL di unita con un valore qualsiasi e ripetere la sequenza ma non cambia

Grazie per ogni contributo

Franco Cazzola


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

puoi mettere tutti i casi in un unico comando, in questo caso replica WHEN “stringa”=‘AA’ THEN ‘aa’ le N volte che ti serve tipo così:

CASE WHEN “stringa”=‘02’ THEN ‘200’ WHEN “stringa”=‘01’ THEN ‘100’ WHEN “stringa”=‘03’ T HEN ‘300’ WHEN “stringa”=‘04’ THEN ‘400’ ELSE NULL END

Il giorno mer 2 mar 2022 alle ore 12:00 Franco Cazzola <franco.cazzola@idroambiente.it> ha scritto:

Grazie Federico per la pronta risposta

Purtroppo ho circa 30 casi.

Spero che la lunghezza della istruzione CASE non sia limitata nel numero di caratteri

Ci sono altre soluzioni ?

Franco

Da: Federico Gianoli <gianoli.federico@gmail.com>
Inviato: mercoledì 2 marzo 2022 11:20
A: Franco Cazzola <franco.cazzola@idroambiente.it>
Cc: qgis-it-user@lists.osgeo.org
Oggetto: Re: [QGIS-it-user] Tabella attributi - Calcolatore campi

Ciao,

Dalla documentazione: CASE è usato per valutare una serie di condizioni e restituisce un risultato per la prima condizione incontrata. Le condizioni sono valutate sequenzialmente, e se una condizione è vera, la valutazione si ferma, e il corrispondente risultato è restituito. Se nessuna delle condizioni è vera, è restituito il valore nella clausola ELSE.

prova con:

CASE WHEN “stringa”=‘02’ THEN ‘200’ WHEN “stringa”=‘01’ THEN ‘100’ ELSE NULL END

Il giorno mer 2 mar 2022 alle ore 11:07 Franco Cazzola <franco.cazzola@idroambiente.it> ha scritto:

Buongiorno

Non riesco a capire perché non funziona la seguente sequenza di operazioni.

Devo aggiornare il campo unita in base ai valori del campo stringa.

Esempio: aggiorno il campo unita con valore 200 se il campo stringa=02

Uso la seguente sequenza:

Nella tabella attributi apro il Calcolatore di campi

Flag su Aggiorna campo esistente, scelgo il campo unita e nella espressione inserisco**:**

CASE WHEN “unita” IS NULL AND “stringa”=‘01’ THEN ‘100’ END

e ottengo quanto sotto riportato

Ora se eseguo la stessa sequenza con

CASE WHEN “unita” IS NULL AND “stringa”=‘02’ THEN ‘200’ END

Mi aggiorna il campo unita con 200 ma sostituisce anche i precedenti valori.

Perché ?

Ho provato a sostituire il campo NULL di unita con un valore qualsiasi e ripetere la sequenza ma non cambia

Grazie per ogni contributo

Franco Cazzola


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ciao, se i due campi seguissero la logica da te spiegata: a 01 →100, 02→200 e 03→300 … 10→1000 …

ti consiglio la seguente espressione:

to_int(“stringa”)*100

saluti

image001.png

image002.png

···

Ing. Salvatore Fiandaca
mobile.:+39 327.493.8955
m: pigrecoinfinito@gmail.com
C.F.: FNDSVT71E29Z103G
P.IVA: 06597870820
membro QGIS Italia - http://qgis.it/
socio GFOSS.it - http://gfoss.it/
blog:**** https://pigrecoinfinito.com/
FB: Co-admin - https://www.facebook.com/qgis.it/****
TW: ****https://twitter.com/totofiandaca

43°51’0.54"N 10°34’27.62"E - EPSG:4326

“Se la conoscenza deve essere aperta a tutti,
perchè mai limitarne l’accesso?”
R. Stallman

Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E’ vietata qualsiasi forma di riproduzione o divulgazione senza l’esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso.

Grazie Totò,
effettivamente si risparmia parecchio tempo così.

Fede

Il giorno mer 2 mar 2022 alle ore 12:24 Totò Fiandaca <pigrecoinfinito@gmail.com> ha scritto:

Ciao, se i due campi seguissero la logica da te spiegata: a 01 →100, 02→200 e 03→300 … 10→1000 …

ti consiglio la seguente espressione:

to_int(“stringa”)*100

saluti

Il giorno mer 2 mar 2022 alle ore 12:03 Federico Gianoli <gianoli.federico@gmail.com> ha scritto:

puoi mettere tutti i casi in un unico comando, in questo caso replica WHEN “stringa”=‘AA’ THEN ‘aa’ le N volte che ti serve tipo così:

CASE WHEN “stringa”=‘02’ THEN ‘200’ WHEN “stringa”=‘01’ THEN ‘100’ WHEN “stringa”=‘03’ T HEN ‘300’ WHEN “stringa”=‘04’ THEN ‘400’ ELSE NULL END

Il giorno mer 2 mar 2022 alle ore 12:00 Franco Cazzola <franco.cazzola@idroambiente.it> ha scritto:

Grazie Federico per la pronta risposta

Purtroppo ho circa 30 casi.

Spero che la lunghezza della istruzione CASE non sia limitata nel numero di caratteri

Ci sono altre soluzioni ?

Franco

Da: Federico Gianoli <gianoli.federico@gmail.com>
Inviato: mercoledì 2 marzo 2022 11:20
A: Franco Cazzola <franco.cazzola@idroambiente.it>
Cc: qgis-it-user@lists.osgeo.org
Oggetto: Re: [QGIS-it-user] Tabella attributi - Calcolatore campi

Ciao,

Dalla documentazione: CASE è usato per valutare una serie di condizioni e restituisce un risultato per la prima condizione incontrata. Le condizioni sono valutate sequenzialmente, e se una condizione è vera, la valutazione si ferma, e il corrispondente risultato è restituito. Se nessuna delle condizioni è vera, è restituito il valore nella clausola ELSE.

prova con:

CASE WHEN “stringa”=‘02’ THEN ‘200’ WHEN “stringa”=‘01’ THEN ‘100’ ELSE NULL END

Il giorno mer 2 mar 2022 alle ore 11:07 Franco Cazzola <franco.cazzola@idroambiente.it> ha scritto:

Buongiorno

Non riesco a capire perché non funziona la seguente sequenza di operazioni.

Devo aggiornare il campo unita in base ai valori del campo stringa.

Esempio: aggiorno il campo unita con valore 200 se il campo stringa=02

Uso la seguente sequenza:

Nella tabella attributi apro il Calcolatore di campi

Flag su Aggiorna campo esistente, scelgo il campo unita e nella espressione inserisco**:**

CASE WHEN “unita” IS NULL AND “stringa”=‘01’ THEN ‘100’ END

e ottengo quanto sotto riportato

Ora se eseguo la stessa sequenza con

CASE WHEN “unita” IS NULL AND “stringa”=‘02’ THEN ‘200’ END

Mi aggiorna il campo unita con 200 ma sostituisce anche i precedenti valori.

Perché ?

Ho provato a sostituire il campo NULL di unita con un valore qualsiasi e ripetere la sequenza ma non cambia

Grazie per ogni contributo

Franco Cazzola


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Ing. Salvatore Fiandaca
mobile.:+39 327.493.8955
m: pigrecoinfinito@gmail.com
C.F.: FNDSVT71E29Z103G
P.IVA: 06597870820
membro QGIS Italia - http://qgis.it/
socio GFOSS.it - http://gfoss.it/
blog:**** https://pigrecoinfinito.com/
FB: Co-admin - https://www.facebook.com/qgis.it/****
TW: ****https://twitter.com/totofiandaca

43°51’0.54"N 10°34’27.62"E - EPSG:4326

“Se la conoscenza deve essere aperta a tutti,
perchè mai limitarne l’accesso?”
R. Stallman

Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E’ vietata qualsiasi forma di riproduzione o divulgazione senza l’esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso.