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

HyperFileSQL Discussion :

Nb d'intitulé identiques dans une table


Sujet :

HyperFileSQL

  1. #1
    Membre régulier
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : apprenti
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 212
    Points : 100
    Points
    100
    Par défaut Nb d'intitulé identiques dans une table
    Bonjour,

    Je suis devant un problème et je n'arrive pas à trouver la solution.
    Je ne sais pas si c'est le bon forum, mais je le mets ici car je travaille en HFSQL.

    Je cherche à récupérer le Nombre de ligne qui contiennent SAVA ou SAVP ou SAVI

    En gros
    hbgkjhkjj SAVA kjdhszfkjhqdf
    kjsbdkjdhsflkdsf SAVP kqsjhklkjds
    dfsgdsfgdgdfgdfg SAVA qsfsdfssdf
    qsdfqsdfqsdf SAVP sdfsdfsdfdsf
    dkjqsfkqdhfj SAVI qsfkjhdkqsf
    SAVA zhjisfklqsdjfqdfq
    Donc avoir en résultat de requete :
    SAVA 3
    SAVP 2
    SAVI 1

    J'espère m'être bien explique.

    Merci pour votre retour

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Hello,

    ce n'est pas forcément le bon forum mais on va pouvoir t'aider quand même... 2 solutions (au moins) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -- SQL
    SELECT * FROM Table WHERE LIBELLE LIKE '%SAVA%' OR LIBELLE LIKE '%SAVP%' OR LIBELLE LIKE '%SAVI%'
    Ensuite, tu parcours le résultat de ta requête...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Wlangage
    HLitPremier(MaTable)
    TANTQUE PAS HEnDehors(Matable)
    Si ChaineOccurrence(MaTable.LIBELLE, "SAVA") > 0 _ou_ ChaineOccurrence(MaTable.LIBELLE, "SAVP") > 0 _ou_ ChaineOccurrence(MaTable.LIBELLE, "SAVI") > 0 ALORS
    Trace(MaTable.LIBELLE)
    FIN
    HLitSuivant(MaTable)
    FIN
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre régulier
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : apprenti
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 212
    Points : 100
    Points
    100
    Par défaut
    Merci, j'avais oublier de rajouter que j'ai des numérso de semaines sur lesquells je veux faire ce tri aussi

  4. #4
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Dans ce cas, un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    HLitPremier(MaTable)
    TANTQUE PAS HEnDehors(Matable)
    Si ChaineOccurrence(MaTable.LIBELLE, "SAVA") > 0 alors
    NbSava++
    sinon si ChaineOccurrence(MaTable.LIBELLE, "SAVP") > 0 ALORS
    NbSavp++
    SINON SI ChaineOccurrence(MaTable.LIBELLE, "SAVI") > 0 ALORS
    NbSavi++
    FIN
    FIN
    FIN
    HLitSuivant(MaTable)
    FIN
    On doit pouvoir le faire également en SQL mais j'ai un doute sur la requête :
    - je ne vois pas très bien pour les COUNT en fonction des LIKE avec 3 conditions différentes... Un UNION ?
    - pas sûr non plus que HF te permette des requêtes trop alambiquées...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    bonjour,

    j'aurais fait comme ceci (à tester car écrit à la volée) :

    Code sql : 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
     
    select
    	NumSemaine,
    	sum(NbSAVA) as NbSAVA,
    	sum(NbSAVP) as NbSAVP,
    	sum(NbSAVI) as NbSAVI
    from (
    	select
    		NumSemaine,
    		(case when MaCol like '%SAVA%' then 1 else 0 end) as NbSAVA,
    		(case when MaCol like '%SAVP%' then 1 else 0 end) as NbSAVP,
    		(case when MaCol like '%SAVI%' then 1 else 0 end) as NbSAVI
    	from
    		MaTable
    	) as TMP
    group by
    	TMP.NumSemaine
    Cordialement JeAn-PhI

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    +1 pour la requête

    C'est l'idée que j'avais mais je n'aurais jamais su l'écrire...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Membre régulier
    Homme Profil pro
    apprenti
    Inscrit en
    Décembre 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : apprenti
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 212
    Points : 100
    Points
    100
    Par défaut
    Merci pour votre aide, au final, le dossier a été transféré à un collègue

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    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 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Jean-Phi, on peut largement simplifier ta requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select
    	NumSemaine,
    	sum(case when MaCol like '%SAVA%' then 1 else 0 end) as NbSAVA,
    	sum(case when MaCol like '%SAVP%' then 1 else 0 end) as NbSAVP,
    	sum(case when MaCol like '%SAVI%' then 1 else 0 end) as NbSAVI
    from
    	MaTable
    group by
    NumSemaine
    Après tout, pourquoi passer par une sous-requête ?

    Tatayo.

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    merci je savais, c'était juste pour une explication plus claire dans la démarche pour arriver au résultat dans le cas où il n'était pas familier avec SQL, de plus sur le plan d'exécution cela ne change rien en terme de rapidité
    Cordialement JeAn-PhI

Discussions similaires

  1. [MySQL] Insérer ligne identique dans une <table>
    Par NoxWeed dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/04/2011, 15h47
  2. Réponses: 12
    Dernier message: 09/11/2009, 19h56
  3. Enlever les données identiques dans une table
    Par DubeiserTM dans le forum Langage SQL
    Réponses: 15
    Dernier message: 31/01/2007, 21h14
  4. Enlever les données identiques dans une table
    Par DubeiserTM dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/01/2007, 18h27
  5. [SQL 2005] Insertion de deux données identiques dans une table
    Par skystef dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/01/2007, 22h50

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