Nous souhaitons obtenir le nombre annuel total d'entrées depuis 1979. Le résultat devra être trié par année.
Voici le code 4D correspondant à cette requête :
 TABLEAU ENTIER(aMovieYear;0)
 TABLEAU ENTIER LONG(aSoldTickets;0)
 C_ENTIER LONG($MovieYear;$vCrtMovieYear;$i)
 
 REDUIRE SELECTION([MOVIES];0)
 $MovieYear:=1979
 CHERCHER([MOVIES];[MOVIES]Year_of_Movie>=$MovieYear)
 TRIER([MOVIES];[MOVIES]Year_of_Movie;>)
 $vCrtMovieYear:=0
 $vInd:=Taille tableau(aMovieYear)
 Boucle($i;1;Enregistrements trouves([MOVIES]))
    Si([MOVIES]Year_of_Movie#$vCrtMovieYear)
       $vCrtMovieYear:=[MOVIES]Year_of_Movie
       $vInd:=$vInd+1
       INSERER DANS TABLEAU(aMovieYear;$vInd;1)
       aMovieYear{$vInd}:=$vCrtMovieYear
       INSERER DANS TABLEAU(aSoldTickets;$vInd;1)
    Fin de si
    aSoldTickets{$vInd}:=aSoldTickets{$vInd}+[MOVIES]Sold_Tickets
    ENREGISTREMENT SUIVANT([MOVIES])
 Fin de boucle
  
 TABLEAU TEXTE(aTitles;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aDirectors;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aMedias;Taille tableau(aMovieYear))
 TABLEAU ENTIER LONG(aNrActors;Taille tableau(aMovieYear))
  - En utilisant du code SQL :
 TABLEAU ENTIER(aMovieYear;0)
 TABLEAU ENTIER LONG(aSoldTickets;0)
 C_ENTIER LONG($MovieYear)
 
 REDUIRE SELECTION([MOVIES];0)
 $MovieYear:=1979
 Debut SQL
    SELECT Year_of_Movie, SUM(Sold_Tickets)
    FROM MOVIES
    WHERE Year_of_Movie >= :$MovieYear
    GROUP BY Year_of_Movie
    ORDER BY 1
    INTO :aMovieYear,  :aSoldTickets;
 Fin SQL
  
 TABLEAU TEXTE(aTitles;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aDirectors;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aMedias;Taille tableau(aMovieYear))
 TABLEAU ENTIER LONG(aNrActors;Taille tableau(aMovieYear))
 
- En utilisant les commandes SQL génériques :
 C_TEXTE($tQueryTxt)
 TABLEAU ENTIER LONG(aSoldTickets;0)
 TABLEAU ENTIER(aMovieYear;0)
 C_ENTIER LONG($MovieYear)
 
 REDUIRE SELECTION([MOVIES];0)
 $MovieYear:=1979
 SQL LOGIN(SQL_INTERNAL;"";"")
 $tQueryTxt:=""
 $tQueryTxt:=$tQueryTxt+"SELECT Year_of_Movie, SUM(Sold_Tickets)"
 $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
 $tQueryTxt:=$tQueryTxt+" WHERE Year_of_Movie >= :$MovieYear"
 $tQueryTxt:=$tQueryTxt+" GROUP BY Year_of_Movie"
 $tQueryTxt:=$tQueryTxt+" ORDER BY 1"
 SQL EXECUTER($tQueryTxt;aMovieYear;aSoldTickets)
 SQL CHARGER ENREGISTREMENT(SQL tous les enregistrements)
 SQL LOGOUT
  
 TABLEAU TEXTE(aTitles;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aDirectors;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aMedias;Taille tableau(aMovieYear))
 TABLEAU ENTIER LONG(aNrActors;Taille tableau(aMovieYear)) 
- En utilisant la commande CHERCHER PAR SQL :
 TABLEAU ENTIER LONG(aSoldTickets;0)
 TABLEAU ENTIER(aMovieYear;0)
 C_ENTIER LONG($MovieYear)
 
 REDUIRE SELECTION([MOVIES];0)
 $MovieYear:=1979
 CHERCHER PAR SQL([MOVIES];"Year_of_Movie >= :$MovieYear")
 TRIER([MOVIES];[MOVIES]Year_of_Movie;>)
 $vCrtMovieYear:=0
 $vInd:=Taille tableau(aMovieYear)
 Boucle($i;1;Enregistrements trouves([MOVIES]))
    Si([MOVIES]Year_of_Movie#$vCrtMovieYear)
       $vCrtMovieYear:=[MOVIES]Year_of_Movie
       $vInd:=$vInd+1
       INSERER DANS TABLEAU(aMovieYear;$vInd;1)
       aMovieYear{$vInd}:=$vCrtMovieYear
       INSERER DANS TABLEAU(aSoldTickets;$vInd;1)
    Fin de si
    aSoldTickets{$vInd}:=aSoldTickets{$vInd}+[MOVIES]Sold_Tickets
    ENREGISTREMENT SUIVANT([MOVIES])
 Fin de boucle
  
 TABLEAU TEXTE(aTitles;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aDirectors;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aMedias;Taille tableau(aMovieYear))
 TABLEAU ENTIER LONG(aNrActors;Taille tableau(aMovieYear)) 
- En utilisant la commande SQL dynamique EXECUTE IMMEDIATE :
 C_TEXTE($tQueryTxt)
 TABLEAU ENTIER LONG(aSoldTickets;0)
 TABLEAU ENTIER(aMovieYear;0)
 C_ENTIER LONG($MovieYear)
 
 $MovieYear:=1979
 $tQueryTxt:=""
 $tQueryTxt:=$tQueryTxt+"SELECT Year_of_Movie, SUM(Sold_Tickets)"
 $tQueryTxt:=$tQueryTxt+" FROM MOVIES"
 $tQueryTxt:=$tQueryTxt+" WHERE Year_of_Movie >= :$MovieYear"
 $tQueryTxt:=$tQueryTxt+" GROUP BY Year_of_Movie"
 $tQueryTxt:=$tQueryTxt+" ORDER BY 1"
 $tQueryTxt:=$tQueryTxt+" INTO :aMovieYear, :aSoldTickets;"
 Debut SQL
    EXECUTE IMMEDIATE :$tQueryTxt;
 Fin SQL
  
 TABLEAU TEXTE(aTitles;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aDirectors;Taille tableau(aMovieYear))
 TABLEAU TEXTE(aMedias;Taille tableau(aMovieYear))
 TABLEAU ENTIER LONG(aNrActors;Taille tableau(aMovieYear))
 
Pour tester tous ces exemples, lancez la base "4D SQL Code Samples" et affichez la boîte de dialogue principale. Choisissez le mode d'interrogation du moteur de 4D et cliquez sur le bouton Clause GROUP BY.