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
![](/uploads/default/original/2X/c/cf2995578d02c3736f5616d8e4472f90fa3f575a.png)
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é ?
![](/uploads/default/original/2X/8/81177e856e27f15d2f9103f21a98c41f0b495db8.png)
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
![](/uploads/default/original/2X/c/cf2995578d02c3736f5616d8e4472f90fa3f575a.png)
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é ?
![](/uploads/default/original/2X/8/81177e856e27f15d2f9103f21a98c41f0b495db8.png)
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](/uploads/default/original/2X/c/cf2995578d02c3736f5616d8e4472f90fa3f575a.png)
![image002.png](/uploads/default/original/2X/8/81177e856e27f15d2f9103f21a98c41f0b495db8.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
![](/uploads/default/original/2X/c/cf2995578d02c3736f5616d8e4472f90fa3f575a.png)
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é ?
![](/uploads/default/original/2X/8/81177e856e27f15d2f9103f21a98c41f0b495db8.png)
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](/uploads/default/original/2X/c/cf2995578d02c3736f5616d8e4472f90fa3f575a.png)
![image002.png](/uploads/default/original/2X/8/81177e856e27f15d2f9103f21a98c41f0b495db8.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
![](/uploads/default/original/2X/c/cf2995578d02c3736f5616d8e4472f90fa3f575a.png)
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é ?
![](/uploads/default/original/2X/8/81177e856e27f15d2f9103f21a98c41f0b495db8.png)
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.