Newsgroup: it.comp.appl.access
Titolo: Query raggruppamento

Ho provato a fare la query nel modo suggerito:
SELECT principale.Corriere, principale.Provincia, principale.P_C,
 principale.da, Min(principale.Tariffa) AS MinDiTariffa
 FROM principale
 WHERE principale.Provincia)=[Digitare la provincia]) AND
 principale.P_C=[P o C ?]
 GROUP BY principale.Corriere, principale.Provincia, principale.P_C,
 principale.da
 ORDER BY principale.da, Min(principale.Tariffa);
Ecco qua i risultati:
Corriere    Provincia  P_C     da (kg)	MinDiTariffa
corriere 2	AG	C	1	€ 5,00
corriere 1	AG	C	1	€ 10,00
corriere 2	AG	C	2	€ 3,00
corriere 1	AG	C	2	€ 10,00
corriere 2	AG	C	3	€ 5,00
corriere 1	AG	C	3	€ 10,00
corriere 2	AG	C	4	€ 5,00
corriere 1	AG	C	4	€ 10,00
corriere 2	AG	C	5	€ 5,00
corriere 1	AG	C	5	€ 10,00
Come posso fare per estrarre solo quei corrieri con tariffa minore,
cioè al kg 1 dovrebbe estrarmi solo il corriere 2 poichè la tariffa che
applica è minore degli altri corrieri.
Grazie per l'attenzione e dei consigli preziosi
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Caro Roberto, ma non ti sei stancato di postare sempre la stessa cosa
200.000.000.000 di volte. Non č che č per questo che nessuno ti risponde??
In fin dei conti hai sottratto tempo allo studio del problema. Puoi
arrivarci da solo, premi f1 e impiega cosě il tempo che riservi a postare
per l'ennesima volta la stessa richiesta!!!
ciao MAssimiliano
 
--------------------------------
Inviato via 
http://usenet.libero.it


Ciao Roberto
Anche se a naso non mi sembra che serva un'aggregazione per
Corriere,Provincia,P_C,Da in quanto non credo che un corriere abbia piů
prezzi per stessa Provincia, stesso P_C e stesso  Da
Questa Query estrae solo i prezzi piů bassi in base alla tua.
SELECT principale.Corriere, principale.Provincia, principale.P_C,
principale.Da, Min(principale.Tariffa) AS MinDiTariffa
FROM principale
GROUP BY principale.Corriere, principale.Provincia, principale.P_C,
principale.Da
HAVING (((principale.Provincia)=[Digitare la provincia]) AND
((principale.P_C)=[P o C ?]) AND ((Min(principale.Tariffa)) In (SELECT
Min(Tariffa) FROM Principale GROUP BY Provincia,P_C,Da
HAVING ((principale.Provincia)=[Digitare la provincia]) AND
((principale.P_C)=[P o C ?]))))
ORDER BY principale.Da, Min(principale.Tariffa);
e se l'aggregazione non č necessaria
SELECT principale.Corriere, principale.Provincia, principale.P_C,
principale.Da, principale.Tariffa
FROM principale
WHERE (((principale.Provincia)=[Digitare la provincia]) AND
((principale.P_C)=[P o C ?]) AND ((principale.Tariffa) In (SELECT
Min(Tariffa) FROM Principale GROUP BY Provincia,P_C,Da
HAVING ((principale.Provincia)=[Digitare la provincia]) AND
((principale.P_C)=[P o C ?]))))
ORDER BY principale.Da, principale.Tariffa;
Ciao Giorgio.

Ciao Giorgio,
Grazie per la risposta, non č che lo stesso corriere applica tariffe
diverse ma nella tabella sono presenti piů corrieri che fanno lo stesso
trasporto con gli stessi Kg nella stessa provincia, la query mi serve
per avere un elenco di solo quei corrieri che hanno la tariffa minore
in quella determinata provincia.
Nell'istruzione che mi hai dato anch'essa mi estrae tutti i corrieri.
Come fare ad estrarre solo quelli con tariffa minore?



L'istruzione che ti ho dato estrae il corriere che applica la tariffa minore
per stessa provincia stesso P_C e stesso Da prima di proportela l'ho provata
, evidentemente quello che chiedi non č quello che vuoi ottenere
Ciao Giorgio.


Vediamo se riusciamo a capirci
Dati in tabella principale
Corriere    Provincia P_C Da   Tariffa
Corriere 1     AG       C     1        10
Corriere 1     AG       C     2          3
Corriere 1     AG       C     3        10
Corriere 1     AG       C     4        10
Corriere 1     AG       C     5          2
Corriere 1     AG       C     6        10
Corriere 2     AG       C     1          5
Corriere 2     AG       C     2          2
Corriere 2     AG       C     3          5
Corriere 2     AG       C     4          5
Corriere 2     AG       C     5          5
Corriere 3     AG       C     2          1
Corriere 4     AG       C     5          4
Query (otimizzata senza aggregazioni rispetto all'ultima)
SELECT principale.Corriere, principale.Provincia, principale.P_C,
principale.Da, principale.Tariffa
FROM principale
WHERE (((principale.Provincia)=[Digitare la provincia]) AND
((principale.P_C)=[P o C ?]) AND ((principale.Tariffa) In (SELECT
Min(Tariffa) FROM Principale P GROUP BY Provincia,P_C,Da
HAVING ((P.Provincia)=Principale.Provincia) AND ((P.P_C)=Principale.P_C) AND
(P.Da=Principale.Da))))
ORDER BY principale.Da, principale.Tariffa;
Risultato
Corriere    Provincia   P_C Da Tariffa
Corriere 2        AG       C    1        5
Corriere 3        AG       C    2        1
Corriere 2        AG       C    3        5
Corriere 2        AG       C    4        5
Corriere 1        AG       C    5        2
Corriere 1        AG       C    6      10
Come vedi per uno stesso Da ho un solo corriere che corrisponde a quello con
tariffa più bassa.
Ciao Giorgio.

 >
Se vuoi una versione che rende visibile in modo grafico la logica della
Query
Select Pr.Corriere,Pr.Provincia,Pr.P_C,Pr.Da,Pr.Tariffa
FROM Principale AS Pr
INNER JOIN (SELECT Provincia,P_C,Da,Min(Tariffa) AS MinTar
            From Principale
            GROUP BY Provincia,P_C,Da) AS P
ON Pr.Provincia=P.Provincia AND Pr.P_C=P.P_C AND Pr.Da=P.Da AND
Pr.Tariffa=P.MinTar
WHERE Pr.Provincia=[Digitare la provincia] AND Pr.P_C=[P o C ?]
ORDER BY Pr.Da, Pr.Tariffa
Ciao Giorgio.

Ciao Giorgio,
Sei stato gentilissimo, la query che mi hai proposto funziona benissimo,
un solo problema, quando cambio qualche tariffa nella tabella, non so il
perchè ma la query mi estrae solo per quel chilo che ho modificato
anche l'altro corriere ( forse è per questo che nella precedente mail
ti ho detto che non funzionava )
Es:
Corriere     Provincia  P_C      da      Tariffa	
corriere 1	AG	 C	 1  	€ 10,00	
corriere 2	AG	 C	 1       € 5,00
-La query mi estrae solo:
corriere 2	AG	 C	 1       € 5,00
-Se modifico:
corriere 1	AG	 C	 1  	€ 2,00
-allora la query mi presenta:
corriere 1	AG	 C	 1  	 € 2,00	
corriere 2	AG	 C	 1       € 5,00
Questo succede solo quando modifico qualcosa nella tabella.
Come mai ?
Grazie infinite, mi hai risolto un grande problema


Grazie, con l'ultimo query che mi hai sritto:
Select Pr.Corriere,Pr.Provincia,Pr.P_C,Pr.Da,Pr.Tariffa
FROM Principale AS Pr
INNER JOIN (SELECT Provincia,P_C,Da,Min(Tariffa) AS MinTar
            From Principale
            GROUP BY Provincia,P_C,Da) AS P
ON Pr.Provincia=P.Provincia AND Pr.P_C=P.P_C AND Pr.Da=P.Da AND
Pr.Tariffa=P.MinTar
WHERE Pr.Provincia=[Digitare la provincia] AND Pr.P_C=[P o C ?]
ORDER BY Pr.Da, Pr.Tariffa
Funziona tutto, e anche effettuando dei cambiamenti sulla tabella,
non mi comporta nessuna duplicazione,
Grazie ancora
