Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Relazioni tra due tabelle

    Salve a tutti,
    ho un db access con due tabelle (clienti e ore_mese) così composte:

    clienti
    id operatore inserito
    1 pinco pallo Ok
    2 tizio caio Ok
    4 pinco pallo Ok
    5 pinco pallo Ko

    ore_mese
    id operatore ore
    1 pinco pallo 32
    2 pippo pluto 0
    3 tizio caio 15

    Vorrei visualizzare una colonna con la lista di tutti gli operatori della tabella ore_mese con le rispettive ore nella colonna successiva e, nella colonna di seguito, il conteggio degli "Ok" contenuti nel campo "inserito".
    ES.

    operatore ore inserito Ok
    pinco pallo 32 2
    pippo pluto 0 0
    tizio caio 15 1

    Ho fatto decine di tentativi con il JOIN tra le due tabelle prendendo in considerazione, come chiave primaria, il campo operatore ma non riesco a visualizzare più di un operatore.
    Di seguito il codice:
    codice:
    sql = "SELECT ore_mese.operatore, ore_mese.ore, COUNT (clienti.inserito) AS quanti FROM ore_mese INNER JOIN clienti ON clienti.operatore=ore_mese.operatore WHERE clienti.inserito='Ok' GROUP BY ore_mese.operatore, ore_mese.ore"
    
    
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    
    
    if not rs.EOF then      
       
    do while not(rs.eof)
    Sicuramente non ho ben chiara la sintassi del JOIN.
    Potreste darmi una mano?

    Grazie a tutti.

  2. #2
    Up

  3. #3
    Sbattendo la testa più volte ho capito che il problema era il campo in comune nelle due tabelle (non capisco perché il campo "operatore" non viene accettato) ed ho inserito un nuovo campo "username" senza spazi, apostrofi e accenti.
    Adesso vorrei inserire due COUNT (al posto di quello esistente) ma ognuno di essi deve avere delle clausole WHERE differenti.
    Come posso fare?

    Grazie a tutti

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,657
    se riesco, più tardi provo a dare un'occhiata

    non vorrei che ti sentissi abbandonato...

  5. #5
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    se riesco, più tardi provo a dare un'occhiata

    non vorrei che ti sentissi abbandonato...
    Beh, un po'... in effetti...

    Grazie mille

  6. #6
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    590
    Quote Originariamente inviata da marocco82 Visualizza il messaggio
    Salve a tutti,
    ho un db access con due tabelle (clienti e ore_mese) così composte:

    clienti
    id operatore inserito
    1 pinco pallo Ok
    2 tizio caio Ok
    4 pinco pallo Ok
    5 pinco pallo Ko

    ore_mese
    id operatore ore
    1 pinco pallo 32
    2 pippo pluto 0
    3 tizio caio 15

    Vorrei visualizzare una colonna con la lista di tutti gli operatori della tabella ore_mese con le rispettive ore nella colonna successiva e, nella colonna di seguito, il conteggio degli "Ok" contenuti nel campo "inserito".
    ES.

    operatore ore inserito Ok
    pinco pallo 32 2
    pippo pluto 0 0
    tizio caio 15 1

    Ho fatto decine di tentativi con il JOIN tra le due tabelle prendendo in considerazione, come chiave primaria, il campo operatore ma non riesco a visualizzare più di un operatore.
    Di seguito il codice:
    codice:
    sql = "SELECT ore_mese.operatore, ore_mese.ore, COUNT (clienti.inserito) AS quanti FROM ore_mese INNER JOIN clienti ON clienti.operatore=ore_mese.operatore WHERE clienti.inserito='Ok' GROUP BY ore_mese.operatore, ore_mese.ore"
    
    
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    
    
    if not rs.EOF then      
       
    do while not(rs.eof)
    Sicuramente non ho ben chiara la sintassi del JOIN.
    Potreste darmi una mano?

    Grazie a tutti.
    ciao
    io farei nel modo seguente
    durante il ciclo di lettura aprirei un recordset temporaneo per eseguire il conteggio
    faccio un esempio postando il codice che farei io...

    codice:
    dim sql,sql1,inseriti
    Set rs = Server.CreateObject("ADODB.Recordset")
    Set rs1 = Server.CreateObject("ADODB.Recordset")
    
    rs.Open sql, conn ,3,3
    if  not rs.EOF then
       do until rs.eof
       sql1="SELECT count(*) as inseritoOK from Clienti where operatore='" & rs("operatore") & " and inserito='ok'; "
       rs1.open sql1,conn, 3, 3
       inseriti=rs1("inseritoOK")
       rs1.Close
      ' ....facci quello che vuoi tabella, etc etc
      response.write("operatore:" & rs("operatore") & ", ore: " & rs("ore") & ", inseriti:" & inseriti)
      rs.movenext
      loop
    end if
    rs.close

    mi sembra piu semplice che impelagarsi in un join che non è fatto per questo scopo...

    ciao
    Vic53

  7. #7
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    590
    Quote Originariamente inviata da marocco82 Visualizza il messaggio
    Salve a tutti,
    ho un db access con due tabelle (clienti e ore_mese) così composte:

    clienti
    id operatore inserito
    1 pinco pallo Ok
    2 tizio caio Ok
    4 pinco pallo Ok
    5 pinco pallo Ko

    ore_mese
    id operatore ore
    1 pinco pallo 32
    2 pippo pluto 0
    3 tizio caio 15

    Vorrei visualizzare una colonna con la lista di tutti gli operatori della tabella ore_mese con le rispettive ore nella colonna successiva e, nella colonna di seguito, il conteggio degli "Ok" contenuti nel campo "inserito".
    ES.

    operatore ore inserito Ok
    pinco pallo 32 2
    pippo pluto 0 0
    tizio caio 15 1

    Ho fatto decine di tentativi con il JOIN tra le due tabelle prendendo in considerazione, come chiave primaria, il campo operatore ma non riesco a visualizzare più di un operatore.
    Di seguito il codice:
    codice:
    sql = "SELECT ore_mese.operatore, ore_mese.ore, COUNT (clienti.inserito) AS quanti FROM ore_mese INNER JOIN clienti ON clienti.operatore=ore_mese.operatore WHERE clienti.inserito='Ok' GROUP BY ore_mese.operatore, ore_mese.ore"
    
    
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn ,3,3
    
    
    if not rs.EOF then      
       
    do while not(rs.eof)
    Sicuramente non ho ben chiara la sintassi del JOIN.
    Potreste darmi una mano?

    Grazie a tutti.
    ciao
    io farei nel modo seguente
    durante il ciclo di lettura aprirei un recordset temporaneo per eseguire il conteggio
    faccio un esempio postando il codice che farei io...

    codice:
    dim sql,sql1,inseriti
    Set rs = Server.CreateObject("ADODB.Recordset")
    Set rs1 = Server.CreateObject("ADODB.Recordset")
    
    rs.Open sql, conn ,3,3
    if  not rs.EOF then
       do until rs.eof
       sql1="SELECT count(*) as inseritoOK from Clienti where operatore='" & rs("operatore") & " and inserito='ok'; "
       rs1.open sql1,conn, 3, 3
       if isNumeric(rs1(inseritoOK")) then
         inseriti=rs1("inseritoOK") 
       else
        inseriti=0
       end if
       rs1.Close
      ' ....facci quello che vuoi tabella, etc etc
      response.write("<br>operatore:" & rs("operatore") & ", ore: " & rs("ore") & ", inseriti:" & inseriti)
      rs.movenext
      loop
    end if
    rs.close
    ho messo il test numerico perche se il contatore non trova nulla puo darsi che ritorni un carattere blank nel campo "inseritoOK"...
    mi sembra piu semplice che impelagarsi in un join che non è fatto per questo scopo...

    ciao
    Vic53

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.