IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

total sur requete SQL


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2012
    Messages : 157
    Points : 39
    Points
    39
    Par défaut total sur requete SQL
    bonsoir
    j'ai une requête SQL après avoir ajouter un ORDER BY a la fin, la ligne total s'affiche on haut, comment faire pour quelle soit en bas.
    merci
    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    LOCAL
    	sMaRequete est une chaîne
    	sdRQ1 est une Source de Données
     
    	sMaRequete = [
    		SELECT 
     
    		SUM(CASE WHEN ( eleves.situat= 6 )  THEN  1 ELSE  0 END ) AS Q, 
    		SUM(CASE WHEN ( eleves.situat= 5 )  THEN  1 ELSE  0 END ) AS A, 
    		SUM(CASE WHEN ( eleves.situat= 4 )  THEN  1 ELSE  0 END ) AS N, 
    		SUM(CASE WHEN ( eleves.situat= 3 )  THEN  1 ELSE  0 END ) AS C, 
    		SUM(CASE WHEN ( eleves.situat = 2 )  THEN  1 ELSE  0 END ) AS I, 
    		SUM(CASE WHEN ( eleves.situat= 1 )  THEN  1 ELSE  0 END ) AS V, 
    		SUM(CASE WHEN ( eleves.situat = 0 )  THEN  1 ELSE  0 END ) AS E, 
    		eleves.genre AS genre,
    		eleves.clas AS clas
    		FROM 
    		eleves
    		WHERE 
    	          eleves.cdecol like '%1'
    		GROUP BY 
    	       eleves.genre,
    	       eleves.clas 
    	      union
    		select
    		SUM(CASE WHEN ( eleves.situat= 6 )  THEN  1 ELSE  0 END ) AS Q, 
    		SUM(CASE WHEN ( eleves.situat= 5 )  THEN  1 ELSE  0 END ) AS A, 
    		SUM(CASE WHEN ( eleves.situat= 4 )  THEN  1 ELSE  0 END ) AS N, 
    		SUM(CASE WHEN ( eleves.situat= 3 )  THEN  1 ELSE  0 END ) AS C, 
    		SUM(CASE WHEN ( eleves.situat = 2 )  THEN  1 ELSE  0 END ) AS I, 
    		SUM(CASE WHEN ( eleves.situat= 1 )  THEN  1 ELSE  0 END ) AS V, 
    		SUM(CASE WHEN ( eleves.situat = 0 )  THEN  1 ELSE  0 END ) AS E
    	      	FROM 
    		eleves
    		WHERE 
    	 eleves.cdecol like '%1'
    		ORDER BY 
    	eleves.clas ,
    	eleves.genre
     
     
    ]
     
    sMaRequete =  ChaîneConstruit(sMaRequete,SAI_codeecole) 
     
    // exécution de la requête 1
    SI PAS HExécuteRequêteSQL(sdRQ1,sMaRequete) ALORS Erreur(HErreurInfo); RETOUR
     
    // rempli la table
    ConstruitTableFichier(Table2,sdRQ1,taRemplirTable)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    Pour commencer, tu as de la chance que ta requête passe, vu que les deux SELECT ne renvoient pas le même nombre de colonnes.

    Sinon pour "forcer" le tri, il suffit d'ajouter une colonne supplémentaire, avec 0 pour les lignes de calcul et 1 pour la ligne de total, et de trier par cette colonne en premier.

    Tatayo.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Surprise... HFSQL accepte ta requête. D'autres moteurs SQL refuseront ta requête.
    Normalement , quand on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select ... from table1
    union
    select ... from table2
    il faut que les 2 ordres select renvoient le même nombre de colonnes .. (et des colonnes de même type mais ici, tu n'as pas ce problème)

    Pour avoir un truc propre ( et portable au cas où ...), il faut donc que tu modifies ta requête pour avoir un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    SELECT 
     
    		SUM(CASE WHEN ( eleves.situat= 6 )  THEN  1 ELSE  0 END ) AS Q, 
    		SUM(CASE WHEN ( eleves.situat= 5 )  THEN  1 ELSE  0 END ) AS A, 
    		SUM(CASE WHEN ( eleves.situat= 4 )  THEN  1 ELSE  0 END ) AS N, 
    		SUM(CASE WHEN ( eleves.situat= 3 )  THEN  1 ELSE  0 END ) AS C, 
    		SUM(CASE WHEN ( eleves.situat = 2 )  THEN  1 ELSE  0 END ) AS I, 
    		SUM(CASE WHEN ( eleves.situat= 1 )  THEN  1 ELSE  0 END ) AS V, 
    		SUM(CASE WHEN ( eleves.situat = 0 )  THEN  1 ELSE  0 END ) AS E, 
    		eleves.genre AS genre,
    		eleves.clas AS clas
    		FROM 
    		eleves
    		WHERE 
    	          eleves.cdecol like '%1'
    		GROUP BY 
    	       eleves.genre,
    	       eleves.clas 
    	      union
    		select
    		SUM(CASE WHEN ( eleves.situat= 6 )  THEN  1 ELSE  0 END ) AS Q, 
    		SUM(CASE WHEN ( eleves.situat= 5 )  THEN  1 ELSE  0 END ) AS A, 
    		SUM(CASE WHEN ( eleves.situat= 4 )  THEN  1 ELSE  0 END ) AS N, 
    		SUM(CASE WHEN ( eleves.situat= 3 )  THEN  1 ELSE  0 END ) AS C, 
    		SUM(CASE WHEN ( eleves.situat = 2 )  THEN  1 ELSE  0 END ) AS I, 
    		SUM(CASE WHEN ( eleves.situat= 1 )  THEN  1 ELSE  0 END ) AS V, 
    		SUM(CASE WHEN ( eleves.situat = 0 )  THEN  1 ELSE  0 END ) AS E,
    null as genre,
    null as clas
    	      	FROM 
    		eleves
    		WHERE 
    	 eleves.cdecol like '%1'
    		ORDER BY 
    	eleves.clas ,
    	eleves.genre
    Tu peux mettre null, mais tu peux aussi mettre 'zzzz' à la place de null. Ca va résoudre ton problème.
    Le problème, c'est qu'à l'écran, tu verras 'zzzz' , et c'est moche. Après avoir chargé ta table, tu peux remplacer ces 'zzzz' par une chaîne vide.

    Tu peux aussi ajouter 2 colonnes dans ta table, rendre ces 2 colonnes invisibles, et utiliser cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    SELECT 
     
    		SUM(CASE WHEN ( eleves.situat= 6 )  THEN  1 ELSE  0 END ) AS Q, 
    		SUM(CASE WHEN ( eleves.situat= 5 )  THEN  1 ELSE  0 END ) AS A, 
    		SUM(CASE WHEN ( eleves.situat= 4 )  THEN  1 ELSE  0 END ) AS N, 
    		SUM(CASE WHEN ( eleves.situat= 3 )  THEN  1 ELSE  0 END ) AS C, 
    		SUM(CASE WHEN ( eleves.situat = 2 )  THEN  1 ELSE  0 END ) AS I, 
    		SUM(CASE WHEN ( eleves.situat= 1 )  THEN  1 ELSE  0 END ) AS V, 
    		SUM(CASE WHEN ( eleves.situat = 0 )  THEN  1 ELSE  0 END ) AS E, 
    		eleves.genre AS genre,
    		eleves.clas AS clas,
                    eleves.genre AS genre_invisible,
                    eleves.clas AS clas_invisible
    		FROM 
    		eleves
    		WHERE 
    	          eleves.cdecol like '%1'
    		GROUP BY 
    	       eleves.genre,
    	       eleves.clas  
    	      union
    		select
    		SUM(CASE WHEN ( eleves.situat= 6 )  THEN  1 ELSE  0 END ) AS Q, 
    		SUM(CASE WHEN ( eleves.situat= 5 )  THEN  1 ELSE  0 END ) AS A, 
    		SUM(CASE WHEN ( eleves.situat= 4 )  THEN  1 ELSE  0 END ) AS N, 
    		SUM(CASE WHEN ( eleves.situat= 3 )  THEN  1 ELSE  0 END ) AS C, 
    		SUM(CASE WHEN ( eleves.situat = 2 )  THEN  1 ELSE  0 END ) AS I, 
    		SUM(CASE WHEN ( eleves.situat= 1 )  THEN  1 ELSE  0 END ) AS V, 
    		SUM(CASE WHEN ( eleves.situat = 0 )  THEN  1 ELSE  0 END ) AS E,
    null as genre,
    null as clas, 
    'zzzz' as genre_invisible,
    'zzzz' as clas_invisible
    	      	FROM 
    		eleves
    		WHERE 
    	 eleves.cdecol like '%1'
    Puis faire un TableTrie() sur les 2 dernières colonnes.

    Tu peux aussi essayer un truc plus simple : ajouter 'NULL LAST' à la fin de ta requête. C'est la syntaxe pour d'autres SGBDR, peut-être que Windev l'accepte !
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La demande ne concerne pas vraiment le produit Windev mais sur HFSQL, il vaudrait mieux poser la question dans la section HFSQL de la section windev dans ce cas.

Discussions similaires

  1. [MySQL]probleme introuvable sur requete sql
    Par SegmentationFault dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2006, 01h12
  2. erreur sur requete sql
    Par boss_gama dans le forum ASP
    Réponses: 1
    Dernier message: 31/07/2006, 14h39
  3. [RegEx] regexp sur requete SQL
    Par wamania dans le forum Langage
    Réponses: 4
    Dernier message: 11/07/2006, 16h40
  4. doute sur requete SQL
    Par gwendk dans le forum ASP
    Réponses: 19
    Dernier message: 31/05/2006, 18h15
  5. Question performance sur requetes sql
    Par shinrei dans le forum ASP
    Réponses: 7
    Dernier message: 19/05/2006, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo