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

MS SQL Server Discussion :

Récupération de données séparées par des pipes "|" et contenues dans un même champs d'une table


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Récupération de données séparées par des pipes "|" et contenues dans un même champs d'une table
    Bonjour à tous,

    Je dois faire des statistiques sur des données contenu dans un champ MOTIF d'une table MA_TABLE.



    Ils sont par exemple de ce type:


    Haricots|Pomme de terre|Carotte|Navets
    Tomate|Carotte|Haricots
    Poivrons|Haricots|Tomate
    Navets
    Sauce|Haricots
    Poivre
    Sel|Gingembre



    J'aimerai avoir le nombre d'occurrences des chaines de caractères Tomate, Poivrons, Pomme de terre, Navets, ...

    Mais je ne trouve pas du tout comment faire avec une requête SQL ...

    Si je n'avais que des données simples sans pipes, c'est à dire:

    Haricots
    Pomme de terre
    Carotte
    Navets
    Tomate
    Carotte
    Haricots
    Poivrons
    Haricots
    Tomate
    Navets
    Sauce
    Poivre
    Sel
    Gingembre




    , ce serait plus simple d'écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MOTIF, COUNT(MOTIF) AS NB
    FROM MA_TABLE
    GROUP BY MOTIF

    Sachant que je ne veux pas prendre connaissance des différentes valeurs que peut contenir le champs MOTIFS, et que chaque jour, la table se charge de nouvelles lignes.
    Je veux seulement le comptage des éléments par nom d'éléments que je vais mettre dans une grille de données comme l'exemple qui suit:

    MOTIF NB

    Carotte 1
    Gingembre 1
    Haricots 4
    Navets 2
    Pomme de terre 1
    Poivrons 1
    Tomate 2
    Poivre 1
    Sauce 1
    Sel 1



    Mais dès qu'il y a des pipes qui sont générés automatiquement dans la table par un scripteur en tant que séparateur, parce que deux légumes (Tomate, puis Carotte) ont été choisi dans une page web, grâce à une checkbox, là ca se complique. o_O



    Merci de m'aider s'il vous plait.

    PS: Comme les données sont confidentielles, je les ai remplacé par des noms de légumes et autres pour le fun...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Je crois que tu as résumé le problème
    Si je n'avais que des données simples sans pipes
    Je dirais que c'est un problème de conception de base de données.
    Disons que la table que tu appelles MA_TABLE aient comme clé primaire ma_id.
    Tu devrais avoir une table d'association MA_TABLE_MOTIF.
    De structure
    ma_id
    MOTIF
    Voir une table Motif
    Motif_id clé primaire
    libelle_motif varchar(25)
    contenant
    1 haricot
    2 choux-fleurs
    3 pommes
    etc..
    et une table MA_TABLE_MOTIF2 de structure
    Ma_id
    Motif_id


    Et là tu pourrais travailler correctement
    A+
    Soazig

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 964
    Points
    52 964
    Billets dans le blog
    6
    Par défaut
    C'est évidemment une des pires conneries que de mettre plusieurs données dans une même colonne. Cela viole la première forme normale :
    http://sqlpro.developpez.com/cours/standards/#L2.2
    et pourri dramatiquement les performances....

    Débarrassez vous des cette ineptie en mettant une table fille.
    Sinon, vous devrez utiliser une fonction de "dépliage" comme celle que j'ai écrite :
    http://blog.developpez.com/sqlpro/p7...sure-multiple/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Oui je sais pertinemment que cela viole la première forme normale.
    C'est les "ingénieurs" dans la boite que je viens d'intégrer qui ont foutu n'importe quoi dans la base.
    Juste l'idée d'intégrer un scripteur qui insère les données avec des pipes si plusieurs cases sont cochées.

    Donc je suis un petit peu là pour nettoyer cette pagaille que je n'ai jamais vu d'ailleurs.

    Merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 14h55
  2. Réponses: 5
    Dernier message: 29/06/2009, 17h18
  3. [MySQL] Plusieurs données concatenées dans un même champ ou une table supplémentaire?
    Par Rocky Turquoise dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/11/2008, 01h31
  4. [MySQL] concaténation plusieurs données même champs d'une table MYSQL
    Par creative69 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/07/2008, 17h58
  5. Sélection de données séparées par des lignes et/ou des colonnes vides
    Par Crystalle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/12/2007, 20h02

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