Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [SQL] Query Count

  1. #1
    Utente di HTML.it L'avatar di Petra
    Registrato dal
    Apr 2005
    Messaggi
    224

    [SQL] Query Count

    Ho una tabella Clienti che contiene i seguenti dati:

    codice:
    | IdCliente |   Cognome   |    Nome    | Visible |
    | 1         |   Bertuzzi  | Alessandro | True    |
    | 2         |   Elini     | Maria      | True    |
    | 3         |   Andreatti | Marco      | False   |
    | 4         |   Rossi     | Emilio     | True    |
    Ho una tabella Abbonamenti che contiene i seguenti dati:

    codice:
    | IdAbbonamento |   IdCliente   | Visible |
    | 1             |   1           | False   |
    | 2             |   2           | True    |
    | 3             |   4           | True    |
    | 4             |   3           | False   |
    | 5             |   1           | True    |
    | 6             |   4           | True    |
    | 7             |   2           | False   |
    La multitabella composta dalle due tabelle precedenti deve risultare così:

    codice:
    | IdCliente |   Cognome   |    Nome    | NumeroAbbonamenti |
    | 1         |   Bertuzzi  | Alessandro | 1                 |
    | 2         |   Elini     | Maria      | 1                 |
    | 3         |   Andreatti | Marco      | 0                 |
    | 4         |   Rossi     | Emilio     | 2                 |
    Io ho già creato una stringa sql che mi consente di fare questo calcolo, ma non riesco a integrare in questa stringa la condizione dei campi Visible. La stringa sarebbe questa...

    codice:
    SELECT Clienti.IdCliente, Clienti.Cognome, Clienti.Nome, Count(Abbonamenti.IdCliente) AS NumeroAbbonamenti
    FROM Clienti LEFT JOIN Abbonamenti ON Clienti.IdCliente=Abbonamenti.IdCliente
    GROUP BY Clienti.IdCliente, Clienti.Cognome, Clienti.Nome;
    ...ma purtroppo non vede se un campo è Visible o meno. In pratica dovrebbe calcolare per ogni cliente tutti gli abbonamenti visibili, e se tutti gli abbonamenti del cliente non sono visibili mi deve restituire zero. Ovviamente se un cliente non è visibile non dovrà risultare visibile anche nella query (anche se ci sono dei suoi abbonamenti visibili).

    Spero che qualcuno di voi riesca ad aiutarmi...grazie mille!!!

  2. #2
    Utente di HTML.it L'avatar di fiber81
    Registrato dal
    Oct 2002
    Messaggi
    328
    Prova così.

    SELECT Clienti.IdCliente, Clienti.Cognome, Clienti.Nome, Clienti.Visibile, Count(Abbonamenti.IdCliente) AS NumeroAbbonamenti
    FROM Clienti LEFT JOIN Abbonamenti ON Clienti.IdCliente=Abbonamenti.IdCliente
    GROUP BY Clienti.IdCliente, Clienti.Cognome, Clienti.Nome
    HAVING Clienti.Visibile='True';
    Ci sono 10 tipi di persone al mondo, quelli che conoscono la numerazione binaria e quelli che non la conoscono!

  3. #3
    Utente di HTML.it L'avatar di Petra
    Registrato dal
    Apr 2005
    Messaggi
    224
    Originariamente inviato da fiber81
    Prova così.

    SELECT Clienti.IdCliente, Clienti.Cognome, Clienti.Nome, Clienti.Visibile, Count(Abbonamenti.IdCliente) AS NumeroAbbonamenti
    FROM Clienti LEFT JOIN Abbonamenti ON Clienti.IdCliente=Abbonamenti.IdCliente
    GROUP BY Clienti.IdCliente, Clienti.Cognome, Clienti.Nome
    HAVING Clienti.Visibile='True';
    L'ho provato e funziona, ma però manca il controllo sul campo Visible dell'Abbonamento. Io ho risolto in questo modo:

    codice:
    SELECT Clienti.IdCliente, Clienti.Cognome, Clienti.Nome, Count(Abbonamenti.IdCliente) AS Abb 
    FROM [Select * From Clienti Where Visible = True]. AS Clienti LEFT JOIN [Select * From Abbonamenti Where Visible = True]. AS Abbonamenti ON Clienti.IdCliente=Abbonamenti.IdCliente
    GROUP BY Clienti.IdCliente, Clienti.Cognome, Clienti.Nome;
    Funziona proprio come dico io...la mia testa bacata a volte funziona bene...l'unico problemuccio di questa stringa è il fatto che la scritta rossa Abb non posso sostituirla con Abbonamenti altrimenti mi darebbe il campo sempre vuoto!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.