Newsgroup: it.comp.lang.visual-basic
Titolo: Query studio

Mi confermate che questa query è impossibile?
In questo impotetico database
Ditte  1-M  Impiegati  1-M   DettCorsi  M-1  Corsi
IdDitta         IdImpiegato       IdCorso             IdCorso
Ditta            IdDitta               IdImpiegato        NomeCorso
vorrei estrarre tutti i NomeCorso e, per ognuno di questi il conteggio di 
IdImpegato che hanno partecipato, il conteggio di IdDitta che ha inviato 
almeno un impiegato a quel corso ( e ogni ditta può mandarne piu di uno: 
quindi il conteggio di ditta deve essere sempre uguale o minore del 
conteggio impiegati).
Per quante prove stia facendo ottengo sempre lo stesso conteggio sia per 
impiegati che ditte, e mi sembrebbe pure logico; ma vorrei avere conferma 
dai piu esperti che è impossibile ottenere il risultato voluto in un'unica 
query.
Oppure, se è possibile, come fare?
Grazie e ciao
grg 

 ha scritto nel messaggio
news:ec1mbf$lic$1...@area.cu.mi.it...

ciao greg,
si può fare così
----
SELECT IdCorso,NomeCorso,
       Count(IdDitta) AS NrDitte,
       Dcount("IdImpiegato","DettCorsi","IdCorso=" & Idcorso) AS NrImpiegati
FROM (SELECT DISTINCT Corsi.IdCorso,Corsi.NomeCorso, Ditte.IdDitta
FROM Ditte INNER JOIN (Impiegati INNER JOIN (Corsi INNER JOIN DettCorsi ON
Corsi.IdCorso = DettCorsi.IdCorso) ON Impiegati.IdImpiegato =
DettCorsi.IdImpiegato) ON Ditte.IdDitta = Impiegati.IdDitta) AS DrvTbl
GROUP BY Idcorso,
       NomeCorso,
      Dcount("IdImpiegato","DettCorsi","IdCorso=" & Idcorso);
----
o meglio ancora così
----
SELECT T1.IdCorso,NomeCorso,
       Count(IdDitta) AS NrDitte,
       NrImpiegati
FROM (SELECT DISTINCT Corsi.IdCorso,Corsi.NomeCorso, Ditte.IdDitta
FROM Ditte INNER JOIN (Impiegati INNER JOIN (Corsi INNER JOIN DettCorsi ON
Corsi.IdCorso = DettCorsi.IdCorso) ON Impiegati.IdImpiegato =
DettCorsi.IdImpiegato) ON Ditte.IdDitta = Impiegati.IdDitta) AS T1
 INNER JOIN (Select IdCorso,Count(IdImpiegato) as NrImpiegati From DettCorsi
Group By IdCorso) AS T2
 ON T1.IdCorso=T2.IdCorso
GROUP BY T1.Idcorso,
       NomeCorso,
       NrImpiegati
----
purtroppo Access non ha la funzione di aggregazione COUNT(Distinct x) che
semplificherebbe moto la query, però si può fare.
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 semplificherebbe moto la query
[CUT]
infatti con Sql Server è quasi banale.
----
Select Corsi.IdCorso,Corsi.NomeCorso,
       Count(Distinct Ditte.IdDitta) AS NrDitte,
       Count(DettCorsi.IdImpiegato) AS NrImpiegati
From   Corsi
         Inner Join
       DettCorsi ON Corsi.IdCorso=DettCorsi.IdCorso
         Inner Join
       Impiegati on DettCorsi.IdImpiegato=Impiegati.IdImpiegato
         Inner Join
       Ditte on Impiegati.IdDitta=Ditte.IdDitta
Group By Corsi.IdCorso,Corsi.NomeCorso
----


 si può fare così
Oh ciao, veramente non mi aspettavo una tua risposta; chissà perchè ti 
pensavo al mare :)
Che dire? sono basito, ormai pensavo non si potesse proprio fare, e invece 
tu hai proposto ben 2 soluzioni (provate e funzionano).
Ma, posso chiedere? visto il poco tempo che ci hai messo, le hai 
letteralmente scritto a mano oppure in sql server c'è un designer come 
quello quello di access, ma ovviamente piu completo e flessibile?
Inoltre, secondo te, in un DB con 100-200.000 record, questa soluzione in un 
unoc passaggio, è più o meno velece che non la soluzione con 2-3 querydef 
salvate sul database?
GRazie ancora di tutto
Ciao, greg

 ----
In effetti si legge e si comprende prima e meglio
greg 

 Ciao, greg
prego,
