Segretoautomobili,
non è che ti sei sforzato nell'impegnarti ad implementare quanto suggerito, anzi presenti delle ulteriori incongruenze.
In merito al tuo ultimo esempio fornito, indichi nella tabella di partenza che il Modello="Giulietta" (ID=4) ha la Trasmissione="Manuale" e non si comprende perché dovrebbe presentare il dato "Automatica" (che magari si riferisce ad altro modello, ad esempio il record con ID=2).
Inoltre per il Modello="Mito" con ID=2 vi sono prezzi diversi (10990 e 9990) ed alimentazioni diverse, mentre per quella con ID=3 prezzi diversi (11990 e 9990) e stessa Alimentazione ("Manuale") ne consegue che stabilito il prezzo minimo a 9990 perché il risultato dovrebbe quello con Alimentazione="Manuale" ?
Infine la tabella appare con ID ripetuti (e dati correlati che possono avere diversità differenti) per cui sarebbe da analizzare, ulteriormente, la struttura originaria e le eventuali operazioni su essa effettuate in modo da individuare se si sia partiti da una situazione normalizzata ed implementata correttamente.
Per quanto riguarda le indicazioni fornite, non credo che tu abbia compreso ed esaminato correttamente i suggerimenti
Segretoautomobili ha scritto:
Ciao Willy55,
ho letto le guide che mi hai girato, ma in tutte si parla sempre di relazioni tra 2 query, io invece ho tutto in un'unica query
Se avessi seguito quanto indicato sulle Tabelle derivate ti saresti accorto che è possibile realizzare tutto con una singola query, quindi riprendendo il codice presentato da Alex avresti, ad esempio:
SELECT Auto.Marca, Auto.Modello, Auto.Carrozzeria, Auto.Alimentazione,
Auto.Trasmissione, Auto.CV, Auto.Cilindrata,
MINP.Marca, MINP.Modello, MINP.Alimentazione, MINP.Minimo
FROM Auto RIGHT JOIN
[select Marca, Modello, Alimentazione, Min(PrezzoPromo) as Minimo
From Auto
Group By Marca, Modello, Alimentazione]. AS MINP
ON (Auto.PrezzoPromo=MINP.Minimo) AND
(Auto.Alimentazione=MINP.Alimentazione) AND
(Auto.Modello=MINP.Modello) AND (Auto.Marca=MINP.Marca);
Se parliamo di due query separate, come nell'ultima soluzione che ti è stata fornita, la prima rappresenta la query interna (sub-query) con i dati del raggruppamento e del minimo di ciascuno la quale va messa in relazione con una esterna che contenga tutte le informazioni aggiuntive non presenti nel raggruppamento.
Impiegando il linguaggio SQL uno sarebbe potuto partire dalla query originaria descritta sopra (ad esempio denominata subQueryInterna):
SELECT Auto.Marca, Auto.Modello, Auto.Alimentazione, Min(Auto.PrezzoPromo) AS MinDiPrezzoPromo
FROM Auto
GROUP BY Auto.Marca, Auto.Modello, Auto.Alimentazione;
e si implementerà la query esterna in relazione con la precedente (in INNER JOIN o LEFT JOIN) come nel seguente esempio:
SELECT Auto.Marca, Auto.Modello, Auto.Carrozzeria, Auto.Alimentazione,
Auto.Trasmissione, Auto.CV, Auto.Cilindrata, Auto.PrezzoPromo,
subQueryInterna.MinDiPrezzoPromo
FROM subQueryInterna
INNER JOIN Auto ON
(subQueryInterna.Marca=Auto.Marca) AND
(subQueryInterna.Modello=Auto.Modello) AND
(subQueryInterna.Alimentazione=Auto.Alimentazione) AND
(subQueryInterna.MinDiPrezzoPromo=Auto.PrezzoPromo);
Ma tant'è.