|
|||
|
|||
|
|||
|
Nous allons étudier dans cette partie des requêtes simples de regroupement à partir de la table suivante (qui est le début d'une table commande) : La table commande
Regroupement d'enregistrement : GROUP BYDescription :Le regroupement d'enregistrement s'utilise au sein d'une requête SQL. Son fonctionnement reste le même que vous utilisiez SQL Server ou Access. Il permet de mesurer la quantité (grâce à des fonctions prédéfinies voir ci dessous) de certains champs répondants à un ou plusieurs critères défini par d'autres champs de la même table. (Je sais cela paraît un peu flou dit comme ça). Fonctions d'agrégations utilisées dans des clauses Group By
Exemple :Montant total des commandes de DUPONT : SQL="SELECT Nom_client, Sum(Montanht) FROM commande WHERE Nom_client='DUPONT' GROUP by Nom_client" Note : En asp une fois mon recordset ouvert sur cette requête, j'aurais accès à deux champs : Enlevons la clause Where à cette requête, elle devient : SQL="SELECT Nom_client, Sum(Montanht) FROM commande GROUP by Nom_client" Cette requête permet d'établir la liste des montant ht (somme) par client, les données générées auront la forme suivante :
Note : DUPONT est de loin mon meilleur client Quel est celui qui a effectué la plus grosse commande : SQL="SELECT Nom_client, Max(Montanht) FROM commande GROUP by Nom_client" Liste des commandes pour le mois de janvier : liste des clients, numéro du mois et montantht. Note : tout champ sélectionné non calculé doit faire partie du regroupement. Autrement dit : SQL="SELECT Nom_client, date_commande, Max(Montanht) FROM commande GROUP by Nom_client" Avec Sql Server SQL="SELECT Nom_client, DATEPART(month,date_commande) Max(Montanht) FROM commande WHERE DATEPART(month,date_commande)=1 GROUP by Nom_client, DATEPART(month,date_commande)" Avec Access SQL="SELECT Nom_client,DATEPART('m',date_commande), Max(Montanht) FROM commande WHERE DATEPART('m',date_commande)=1 GROUP by Nom_client,DATEPART('m',date_commande)" On peut comme nous l'avons vu précédemment, utiliser une clause where au sein d'un regroupement , les enregistrements contenus dans cette clause ne faisant pas forcément parties de la fonction de regroupement. Ce qu'il faut retenir, c'est que la clause where est exécutée sur les lignes de la table utilisée pour la requête et non sur les lignes du regroupement généré... Donc impossible de connaître avec Where tout ceux dont le montant total ht a dépassé 500 F puisque ce nombre appartient au regroupement (somme calculée) et non à la table source. On utilise une autre clause : Quel sont ceux qui ont passé plus de 500 Fht total de commande: SQL="SELECT Nom_client, Sum(Montanht) FROM commande GROUP by Nom_client HAVING SUM(Montanht)>500" > Cette requête retourne 2 enregistrements : |
|
|
(c) 1999-2006 ASP MAGAZINE SARL Partenaires : Codes sources c2i ASP-PHP Hébergement serveurs dédiés Windows |