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 :

Requête de comptage [WD21]


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Requête de comptage
    Bonjour

    Je suis débutant et je me casse la tete depuis quelques cjours. Je dois analyser un fichier et compter des enregistrements en fonction de valeurs dans des lignes.
    Je m'explique en faisant un exemple

    J'ai deux tables liées que voici

    Nom : Analyse.PNG
Affichages : 406
Taille : 8,0 Ko

    Avec le remplissage suivant

    Nom : Article.PNG
Affichages : 367
Taille : 2,3 KoNom : Incident.PNG
Affichages : 354
Taille : 6,3 Ko

    Et j'aimerai avoir le resultat suivant

    Nom : Resultat.PNG
Affichages : 362
Taille : 2,8 Ko

    Je crois qu'il faut faire une sous requête dans la requête mais je ne n'en suis pas sur et je n'y arrive pas. Peut-etre que cela n'est pas possible.

    Pouvez vous me donnez votre avis ?

    Merci d'avance

    Kinan

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour, mauvaise section, ce genre de question doit être posée ici

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Bonjour,

    Cela donnerait une requête de ce genre :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CodeArticle, LibArticle, SUM(DECODE( NatureIncident,'FOUDRE',1,0)) AS FOUDRE,  SUM(DECODE( NatureIncident,'CASSE',1,0)) AS CASSE,  SUM(DECODE( NatureIncident,'VOL',1,0)) AS VOL
    FROM ARTICLE INNER JOIN INCIDENT ON ARTICLE.CODEARTICLE = INCIDENT.CODEARTICLE
    GROUP BY CodeArticle, LibArticle


    Mais il est vrai que c'est une question sur SQL pas sur Windev...
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Avec SQL, avec la réponse de Michel Souris, la mise en page ne sera pas faite. Si tu as 4 articles, et 3 types d'incidents, tu vas avoir potentiellement 4x3 = 12 lignes. Et ce sera à toi de remettre en forme ces 12 lignes pour avoir le tableau demandé.

    Si ta demande est d'avoir directement la bonne disposition des données, à priori, l'outil magique, c'est Le champ "Tableau Croisé Dynamique".
    Je dis cela, mais je n'ai jamais utilisé ce champ Tableau Croisé Dynamique... alors que j'ai utilisé la méthode de Michel Souris des centaines de fois !
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci Michel Souris
    C'est super et ca fonctionne niquel.
    Il va falloir en effet que je trouve un tuto sur le langage SQL, car j'ai l'impression que c'est incontournable avec WINDEV.
    Je suis preneur pour un lien ou un bon bouquin.

    Merci tbc92, j'avais vu qu'il existait des tableaux dynamique mais c'est d'une requête dont j'avais besoin pour alimenter d'autres requêtes.

    romulus001, je ferai plus attention la prochaine fois.

    Merci encore à tous

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    tbc92: si tu regardes bien la requête de michel.souris, le group by concerne le code et le libelle de l'article.
    Donc il y a au mieux une ligne par article, quelque soit le nombre d'incident par article.
    Par conte les articles sans incident ne sont pas pris en compte.

    Tatayo.

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Oupssss !
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci tatayo. En effet, les articles sans incident ne sont pas pris en compte.

    J'ai essayé avec "FROM ARTICLE LEFT JOIN INCIDENT ON ARTICLE.CodeArticle = INCIDENT.CodeArticle" mais ça ne change rien.

    Je pourrais générer un enregistrement fictif dans la table INCIDENT et modifier le GROUP BY en conséquence.

    Y-aurait-il une autre solution ?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Je suis étonné qu'avec une jointure externe, ça ne fonctionne pas. Une "subtilité" de HF ?
    Dans le pire des cas c'est faisable avec une union, mais c'est un peu moche:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT CodeArticle, LibArticle, SUM(DECODE( NatureIncident,'FOUDRE',1,0)) AS FOUDRE,  SUM(DECODE( NatureIncident,'CASSE',1,0)) AS CASSE,  SUM(DECODE( NatureIncident,'VOL',1,0)) AS VOL
    FROM ARTICLE INNER JOIN INCIDENT ON ARTICLE.CODEARTICLE = INCIDENT.CODEARTICLE
    GROUP BY CodeArticle, LibArticle
    union all
    SELECT CodeArticle, LibArticle,0,0,0
    from article
    left outer join INCIDENT ON ARTICLE.CODEARTICLE = INCIDENT.CODEARTICLE
    where incident.idincident is null

    L'idée est de renvoyer avec la deuxième requête les articles sans incident.
    J'ai mis un union all car il ne peut y avoir de doublon, donc inutile de demander au moteur de dé-doublonner les lignes.

    Tatayo.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Merci tatayo

    En effet c'est bizarre que cela ne fonctionne par avec HF. je n'ai pas de message d'erreur, juste que je n'ai pas la ligne avec les articles sans incident.

    Ton contournement fonctionne parfaitement bien. J'ai juste remplacé le INCIDENT.idincident par INCIDENT.CodeIncident.

    Il va falloir que je me mettre rapidement à la syntaxe SQL pour que je sois autonome sur ce point là.

    Encore merci à toi

    Très bonne journée à tous

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Bonjour,

    Je reprends le fil.... je suis également surpris par le non support standard de la jointure externe (sans message ni warning, juste un résultat erroné, j'adore)... encore du gros WTF, je suppose que puisque des éléments de la table left jointé sont utilisées dans des agrégats du SELECT, HF fait nawak. Honteux. C'est sur HF21 ça ? il faudrait le remonter au support technique....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  12. #12
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 327
    Points : 3 840
    Points
    3 840
    Par défaut
    Ca m'a paru tellement gros que j'ai testé car j'utilise régulièrement ces jointures.
    En prenant le même exemple que le sujet, je récupère bien les articles sans incident.

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Ok merci, c'est rassurant.
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  14. #14
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Dites donc Kinan...
    Vous n'auriez pas mis une restriction sur la table en LEFT JOIN des fois ? Si c'est le cas sachez que c'est tout à fait normal.
    Si vous avez besoin d'appliquer une restriction sur la table en LEFT JOIN vous devez le faire dans la jointure sinon, naturellement, le LEFT JOIN devient un INNER...

    PS : désolé, des fois les fils se touchent un peu tard....
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je vais refaire le test car j'ai du surement activer quelque chose sans m'en rendre compte.
    Quand vous parlez de restrictions, est-ce dans les liens entre des tables de l'analyse ?

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Quand je parle de restriction il ne s'agit pas de jointure (autrement appelé "lien entre les tables dans l'analyse").
    Il s'agit des restrictions (je fais exprès d'abuser du champ lexical associé au SQL pour vous y faire), ce que l'on trouve, normalement, dans le WHERE.
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Je me fais tout tout tout petit.... Windev n'a rien à voir...
    Désolé de tous vous avoir embêté par mon étourderie.

    Car en effet j'avais mis un LEFT JOIN à la place de LEFT OUTER JOIN
    Et ça marche à merveille

    Si vous avez un bon livre ou site à me conseiller ... je suis vraiment preneur.

    Merci Michel Souris
    Merci Lo²
    Merci Tatayo
    Merci Tbc92

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    J'ai vu qu'il y avait des tutos sur developpez.com http://sql.developpez.com/

    Bonne fin de journée

  19. #19
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    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 053
    Points : 9 393
    Points
    9 393
    Par défaut
    SQL est une très bonne norme, je ne peux que te recommander de l'apprendre.

    Mais le SQL supporté par HFSQL apporte parfois des surprises.

    Par exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select client , sum( montant ) / 1000000  as MONTANT_EN_MILLIONS 
    from matable
    group by client
    ça ne fonctionnera pas avec HFSQL, et tu devras faire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select client , sum( montant / 1000000 ) as MONTANT_EN_MILLIONS 
    from matable
    group by client
    ou bien :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select client , SUM_MONTANT/1000000 
    from 
    (
    Select client , sum( montant) as SUM_MONTANT
    from matable
    group by client 
    )

    En apprenant SQL sur des tutoriels, tu vas donc apprendre une philosophie, mais tu vas devoir régulièrement vérifier si telle ou telle syntaxe est acceptée par HFSQL.
    Et en échange, HFSQL propose quelques syntaxes intéressantes, et qui ne sont pas standards (à ma connaissance en tout cas).

    Si tu as la possibilité d'utiliser Windev sans HFSQL, et donc remplacer HFSQL par Oracle ou MySQL, ça a certains avantages.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Bonjour

    Merci d'avoir attirer mon attention sur ces différences.

    En ce moment chaque requête est un casse tête, je ne trouve pas de cours spécifiques à HFSQL.
    Il y plein de choses qui ont été faites avec MS Access et le transcodage des requêtes est mon plus gros soucis.
    Je me retrouve avec pleins de limites qui sont surement dûes à mon inexpérience.

    La seule base de données SQL utilisée ici est HFSQL.
    Cela pourrait évoluer vers SQL Server si j'arrive à démontrer des avantages importants mais c'est un tout autre débat.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2002] Requête de comptage
    Par pc75 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 17/04/2009, 13h32
  2. [A-03] Requête et comptage
    Par nico69100 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/01/2009, 15h50
  3. requête de comptage +pourcentage
    Par khilim dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/08/2008, 22h54
  4. Requête avec comptage
    Par Arsene12 dans le forum WinDev
    Réponses: 4
    Dernier message: 16/04/2008, 14h26
  5. Requête de comptage. Problème de mise en forme
    Par ksper92 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/12/2006, 15h17

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