• 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