[Risolto] calcolo dipendente dall'anno

Discussioni sulle caratteristiche di database
Rispondi
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

[Risolto] calcolo dipendente dall'anno

Messaggio da strulga »

Ciao a tutti.
Vorrei creare una query al posto di "VE_PrezziParziali" che prenda i dati da "VTEC02_q", in cui eseguo un calcolo:
nvl( "VTEC02_q"."Quantità01" * "Ingrediente01"."Prezzo" / 1000 , 0 ) AS "PrezzoParziale01"

Siccome Il valore "Prezzo" lo prendo da un'altra tabella con un'istruzione join ("VIngredientiPrezzoAnno"),
vorrei far sì che la query mi selezionasse automaticamente il valore di "VIngredientiPrezzoAnno"."Prezzo" confrontando l'anno di "VIngredientiPrezzoAnno"."Data" che sia uguale all'anno del valore "VTEC02_q"."Data"

In poche parole la query, tra due prezzi uguali, deve scegliere il prezzo che abbia l'anno corrispondente all'anno della query stessa
ma non so che sintassi usare. qualcuno mi può aiutare? Grazie.
Allegati
strulgone - Copia (2) - Copia.odb
(213.21 KiB) Scaricato 125 volte
Ultima modifica di strulga il venerdì 16 marzo 2018, 0:44, modificato 1 volta in totale.
LibreOffice 5.3.0.3 su Windows 7
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggio da strulga »

Ho provato così:

Codice: Seleziona tutto

SELECT "ID_Estratto", "Data",
 "Ingrediente01", "Quantità01F", 
nvl( "VTEC02_q"."Quantità01F" * "Ingrediente01"."Prezzo" / 1000 , 0 ) AS "PrezzoParziale01", 
"Ingrediente02",
 "Quantità02F", 
nvl( "VTEC02_q"."Quantità02F" * "Ingrediente02"."Prezzo" / 1000 , 0 ) AS "PrezzoParziale02", 
"Ingrediente03", 
"Quantità03F" ,
nvl( "VTEC02_q"."Quantità03F" * "Ingrediente03"."Prezzo" / 1000 , 0 ) AS "PrezzoParziale03",
"Ingrediente04",
"Quantità04" AS "Quantità04F",
nvl( "VTEC02_q"."Quantità04" * "Ingrediente04"."Prezzo" / 1000 , 0 ) AS "PrezzoParziale04"

FROM "VTEC02_q" 
LEFT OUTER JOIN "VIngredientiPrezzoAnno" AS "Ingrediente01" ON "VTEC02_q"."Ingrediente01" = "Ingrediente01"."Codice"
where "VTEC02_q"."Anno" = "Ingrediente01"."Data"

LEFT OUTER JOIN "VIngredientiPrezzoAnno" AS "Ingrediente02" ON "VTEC02_q"."Ingrediente02" = "Ingrediente02"."Codice"
where "VTEC02_q"."Anno" = "Ingrediente02"."Data"
LEFT OUTER JOIN "VIngredientiPrezzoAnno" AS "Ingrediente03" ON "VTEC02_q"."Ingrediente03" = "Ingrediente03"."Codice"
where "VTEC02_q"."Anno" = "Ingrediente03"."Data"
LEFT OUTER JOIN "VIngredientiPrezzoAnno" AS "Ingrediente04" ON "VTEC02_q"."Ingrediente04" = "Ingrediente04"."Codice"
where "VTEC02_q"."Anno" = "Ingrediente04"."Data"
ma se lo applico solo all' "Ingrediente01" funziona, ma se lo applico a tutti gli ingredienti non va.
cosa sbaglio?
Ultima modifica di charlie il giovedì 15 marzo 2018, 9:42, modificato 2 volte in totale.
Motivazione: Formattato codice
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: calcolo dipendente dall'anno

Messaggio da charlie »

Non è facile districarsi fra le numerose tabelle, query e complicati nomi campo che usi.
Alcune query fanno in errore (tabella non trovata, p.e.).
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggio da strulga »

Ma se tolgo l'istruzione where funziona tutto perfettamente...
Con where va solo se considero rsclusivamente ingrediente01
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: calcolo dipendente dall'anno

Messaggio da charlie »

Come dicevo ... "colonna non trovata"!
Allegati
Schermata 2018-03-15 alle 12.04.07.png
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggio da strulga »

Ho visto anche io che dice così.
Ma in realtà se faccio il calcolo su un solo ingrediente, la colonna la trova.
le tabelle sono solo quelle due "VIngredientiIDAnno" e "VTEC02_q", e le colonne sono quelle...
secondo me c'è un errore di ortografia nello scrivere quattro left outer join con annessi i relativi where.

Allego da in cui "E_PrezziParziali" calcola l'ingreidente02 e la colonna la trova...
Allegati
strulgone - Copia - Copia.odb
(213.08 KiB) Scaricato 126 volte
LibreOffice 5.3.0.3 su Windows 7
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: calcolo dipendente dall'anno

Messaggio da charlie »

La sintassi che cerchi potrebbe essere questa:

Codice: Seleziona tutto

SELECT "VTEC02_q"."ID_Estratto", "VTEC02_q"."Data", 
"VTEC02_q"."Ingrediente01", "VTEC02_q"."Quantità01F", 
nvl( "Quantità01F" * "Prezzo" / 1000, 0 ) AS "PrezzoParziale01", 
"VTEC02_q"."Ingrediente02", "VTEC02_q"."Quantità02F", 
nvl( "Quantità02F" * "Prezzo" / 1000, 0 ) AS "PrezzoParziale02", 
"VTEC02_q"."Ingrediente03", "VTEC02_q"."Quantità03F", 
nvl( "Quantità03F" * "Prezzo" / 1000, 0 ) AS "PrezzoParziale03" 
FROM { oj "VIngredientiPrezzoAnno" RIGHT OUTER JOIN "VTEC02_q" ON "VIngredientiPrezzoAnno"."Codice" = "VTEC02_q"."Ingrediente01" AND "VIngredientiPrezzoAnno"."Data" = "VTEC02_q"."Anno" AND "VIngredientiPrezzoAnno"."Codice" = "VTEC02_q"."Ingrediente02" AND "VIngredientiPrezzoAnno"."Codice" = "VTEC02_q"."Ingrediente03" }
Note:
  1. Quantità04F non esiste
  2. Non so se servano tutte quelle relazioni JOIN insieme, ma le ho messe lo stesso
  3. Poiché sono partito da una costruzione "grafica" che non ho poi voluto cambiare, le relazioni mi sono venute RIGHT anziché LEFT. Invertendo i termini dovrebbe essere possibile trasformarle, ma le lascerei così se funzionano
  4. Non avevo mai visto la funzione nvl(), da una ricerca dovrebbe funzionare solo con ORACLE ma vedo che funziona anche con HSQLDB 1.8. Mi sembra lo stesso che COALESCE(). Per la serie "non si finisce mai di imparare"
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
strulga
Messaggi: 63
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggio da strulga »

Grazie Chalie, ma non sono riuscito a fare funzionare quello script.
Nel frattempo facendo un po' di prove, sono riuscito a scrivere questo che sembra funzionare:


JOIN "VIngredientiPrezzoAnno" AS"Ingrediente01" ON "VTEC02_q"."Ingrediente01" = "Ingrediente01"."Codice"
JOIN "VIngredientiPrezzoAnno" AS"Ingrediente02" ON "VTEC02_q"."Ingrediente02" = "Ingrediente02"."Codice"
JOIN "VIngredientiPrezzoAnno" AS"Ingrediente03" ON "VTEC02_q"."Ingrediente03" = "Ingrediente03"."Codice"
JOIN "VIngredientiPrezzoAnno" AS"Ingrediente04" ON "VTEC02_q"."Ingrediente04" = "Ingrediente04"."Codice"
where (year ("VTEC02_q"."Data") = "Ingrediente02"."Data" and year ("VTEC02_q"."Data") = "Ingrediente01"."Data" and
year ("VTEC02_q"."Data") = "Ingrediente03"."Data" and year ("VTEC02_q"."Data") = "Ingrediente04"."Data" )

bastava elencare tutti i where in fondo alle join, collegati dal' and!
yeah!! felicissimo!!
Allegati
strulgone - Copia - Copia.odb
(213.3 KiB) Scaricato 112 volte
LibreOffice 5.3.0.3 su Windows 7
Rispondi