Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - query union in access
Forum - Altri Linguaggi - query union in access

Avatar
al3x90 (Normal User)
Rookie


Messaggi: 41
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 15:38
Venerdì, 05/06/2009
Buongiorno ragazzi!

In access
Ho una tabella STUDENTI con attributo chiave: "matricola"
E una tabella ASSENZE con chiave esterna "matricola" , attributo chiave derivato dalla tabella STUDENTI e una flag "Ritardo", che se selezionata voglio che valga = 1, se deselezionata = 6 ...
Utilizzando questo codice:

Codice sorgente - presumibilmente VB.NET

  1. (
  2. Select Assenze.matricola, count(Assenze.Ritardo) As somma_totale_ore
  3. FROM assenze
  4. GROUP BY Assenze.matricola, Assenze.Ritardo
  5. HAVING (Assenze.Ritardo=true)
  6. )
  7.  
  8. UNION (
  9. Select assenze.matricola, Count(Assenze.Ritardo)*6 As somma_totale_ore
  10. FROM assenze
  11. GROUP BY assenze.matricola, assenze.Ritardo
  12. HAVING (assenze.Ritardo=False)
  13. );


                
Mi visualizza ad esempio per la matricola 2

Matricola   somma_totale_ore
    2               3  
    2              18


Io devo poter sommare i due risultati ottenuti, ottenendo un risultato del tipo:

Matricola   somma_totale_ore
    2               21  


Sareste in grado di aiutarmi?!
Son giorni che ci penso su... :(

Ultima modifica effettuata da al3x90 il 05/06/2009 alle 17:43
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 17:33
Venerdì, 05/06/2009
Testo quotato

Postato originariamente da al3x90:




Salve
cosi' a occhio vedo 2 errori:

1) tu scrivi

un flag "Ritardo", che se selezionato voglio che valga = 1, se deselezionata = 6


e poi lo tratti come un booleano

Codice sorgente - presumibilmente Plain Text

  1. [...]
  2. HAVING (Assenze.Ritardo=true)
  3. [...]
  4. HAVING (assenze.Ritardo=False)
  5. [...]



2) non vorrei sbagliarmi ma penso che la GROUP BY possa essere fatta solo su
   assenze.matricola usando la WHERE invece della HAVING
   dovrebbe funzionare meglio.


Poi, per il tuo problema, penso che dovresti mettere le tue quary in una vista
( Chiamiamola V ) e poi fare la query


Codice sorgente - presumibilmente Altri Linguaggi

  1. Select Assenze.matricola, count(somma_totale_ore)
  2. FROM V
  3. GROUP BY Assenze.matricola



Ciao. :k:

Luigi

PM Quote
Avatar
al3x90 (Normal User)
Rookie


Messaggi: 41
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 17:38
Venerdì, 05/06/2009
Ho risolto con una semplice "if" , ero letteralmente fuori strada con la "union"  :)
Grazie comunque per l'attenzione!

PM Quote