• User

    Stringa sql che utilizza più tabelle da riportare in ASP

    Ciao a tutti,
    spero di riuscire a spiegare il mio problema...

    In Access ho realizzato le seguenti query:

    • Query "ELENCOID":
      SELECT COMPILAZIONI.ID
      FROM COMPILAZIONI
      WHERE (((COMPILAZIONI.IDQUESTIONARIO)=4));

    • QUERY "TEST":
      SELECT RISPOSTE.RISPOSTA, RISPOSTE.IDDOMANDA, Count(ELENCOID.ID) AS ConteggioDiID
      FROM RISPOSTE INNER JOIN ELENCOID ON RISPOSTE.IDCOMPILAZIONE = ELENCOID.ID
      GROUP BY RISPOSTE.RISPOSTA, RISPOSTE.IDDOMANDA
      HAVING (((RISPOSTE.IDDOMANDA)=6));

    come potete vedere la query "TEST" utilizza il risultato della query "ELENCOID".
    Ora dovrei riuscire a ricavare un'unica stringa SQL che mi permetta di raggiungere lo stesso risultato, in quanto successivamente la devo utilizzare in una pagina ASP con:

    set res = conn.execute (stringasql_unica_e_completa)

    Potete aiutarmi?
    Grazie in anticipo


  • Moderatore

    Prova così...

    SELECT RISPOSTE.RISPOSTA, RISPOSTE.IDDOMANDA, Count(COMPILAZIONI.ID) AS ConteggioDiID
    FROM RISPOSTE INNER JOIN COMPILAZIONI ON RISPOSTE.IDCOMPILAZIONE = COMPILAZIONI.ID
    GROUP BY RISPOSTE.RISPOSTA, RISPOSTE.IDDOMANDA
    HAVING (RISPOSTE.IDDOMANDA=6 AND COMPILAZIONI.IDQUESTIONARIO = 4);

    La sintassi dell'SQL di Access non la ricordo più tanto, ma credo che impostando (COMPILAZIONI.IDQUESTIONARIO = 4) nell'HAVING o magari nella WHERE dovrebbe funzionare...

    Ciao :ciauz:


  • User

    Ciao Artcava,
    ti ringrazio per la tua risposta!

    Ho fatto il copia incolla della tua stringa in Access, ma compare l'errore "Impossibile eseguire una query che non include l'espressione "RISPOSTE.IDDOMANDA=6 And COMPILAZIONI.IDQUESTIONARIO=4" specificata come parte di una funzione di aggregazione.
    Purtroppo ho sempre fatto query molto semplici ed in questo caso mi trovo impreparato.
    Tu sapresti aiutarmi a capire questo errore ? :mmm:

    PS. Il linguaggio SQL utilizzato da Access è identico a quello utilizzato in ASP, solo che Access aggiunge sempre il nome della tabella anche dove non serve ad es. Access scrive:
    SELECT COMPILAZIONI.ID
    FROM COMPILAZIONI
    WHERE (((COMPILAZIONI.IDQUESTIONARIO)=4));

    ma si può benissimo scrivere
    SELECT ID FROM COMPILAZIONI WHERE IDQUESTIONARIO=4

    è la stessa identica cosa ed Access accetta anche quest'ultima stringa (in realtà la auto-corregge come vuole lui :wink3: )


  • User

    Ecco la risposta:

    SELECT RISPOSTE.RISPOSTA, RISPOSTE.IDDOMANDA, Count(COMPILAZIONI.ID) AS ConteggioDiID
    FROM COMPILAZIONI INNER JOIN RISPOSTE ON COMPILAZIONI.ID = RISPOSTE.IDCOMPILAZIONE
    GROUP BY RISPOSTE.RISPOSTA, RISPOSTE.IDDOMANDA, COMPILAZIONI.IDQUESTIONARIO
    HAVING (((RISPOSTE.IDDOMANDA)=6) AND ((COMPILAZIONI.IDQUESTIONARIO)=4));

    L'ho scoperto per caso, subito dopo aver scritto il precedente messaggio.

    Grazie per il tuo aiuto!


  • Moderatore

    Perfetto, mancava solo COMPILAZIONI.IDQUESTIONARIO nella GROUP BY

    Buon lavoro! :ciauz:


  • User

    Non so come cancellare questo messaggio quindi l'ho modificato