Pannello di Controllo Moderatore ]

[Risolto] calcolo dipendente dall'anno

Discussioni sulle caratteristiche di database

[Risolto] calcolo dipendente dall'anno

Messaggioda strulga » martedì 13 marzo 2018, 23:06

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 11 volte
Ultima modifica di strulga il venerdì 16 marzo 2018, 1:44, modificato 1 volta in totale.
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggioda strulga » mercoledì 14 marzo 2018, 15:23

Ho provato così:
Codice: Seleziona tutto   Espandi visualeStringi visuale
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, 10:42, modificato 2 volte in totale.
Motivazione: Formattato codice
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggioda charlie » giovedì 15 marzo 2018, 10:45

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 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5092
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: calcolo dipendente dall'anno

Messaggioda strulga » giovedì 15 marzo 2018, 11:54

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
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggioda charlie » giovedì 15 marzo 2018, 13:06

Come dicevo ... "colonna non trovata"!
Allegati
Schermata 2018-03-15 alle 12.04.07.png
charlie
macOS 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5092
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: calcolo dipendente dall'anno

Messaggioda strulga » giovedì 15 marzo 2018, 14:07

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 9 volte
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53

Re: calcolo dipendente dall'anno

Messaggioda charlie » giovedì 15 marzo 2018, 18:03

La sintassi che cerchi potrebbe essere questa:
Codice: Seleziona tutto   Espandi visualeStringi visuale
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 10.12 Sierra: Open Office 4.1.5 - LibreOffice 5.4.3.2
Windows 7 pro (VirtualBox): Open Office 4.1.5 - LibreOffice 5.4.4.2
Ubuntu 17.04 LTE (VirtualBox): LibreOffice 5.1.6.2
http://www.charlieopenoffice.altervista.org
Avatar utente
charlie
Site Admin
Site Admin
 
Messaggi: 5092
Iscritto il: mercoledì 19 dicembre 2012, 11:50

Re: calcolo dipendente dall'anno

Messaggioda strulga » venerdì 16 marzo 2018, 1:42

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 9 volte
LibreOffice 5.3.0.3 su Windows 7
strulga
 
Messaggi: 45
Iscritto il: martedì 18 luglio 2017, 11:53


Torna a Base

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti