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

Langage SQL Discussion :

Recomposer les éléments d'un champ


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Par défaut Recomposer les éléments d'un champ
    Bonjour,

    Je souhaite comparer un champ que je dois contrôler et un champ que je calcule.
    Le champ que je calcule est trié de manière croissante (plusieurs noms de boîtiers sur un poteau).
    En revanche, le champ que je dois contrôler est remplit manuellement, donc les boîtiers ne sont pas nécessairement indiqué dans le bon ordre.

    Dans l'exemple ci-dessous, le gid N°1 apparaîtrait en erreur alors que les boîtiers sont bien tous indiqués.
    Comment puis-je réordonner la liste à l'intérieur du champ pour que la comparaison des deux champs fonctionne ?

    Merci

    Nom : Sélection_039.png
Affichages : 210
Taille : 13,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT pt.gid
    ,pt.boitiers AS a_controler
    ,string_agg(bp.nom,';' ORDER BY bp.nom) AS concat
    from "input".poteau AS pt
    left join "input".boitier AS bp on ST_INTERSECTS(pt.geom,bp.geom)
    group by pt.gid,pt.boitiers
    having pt.boitiers != string_agg(bp.nom,';' ORDER by bp.nom)

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Bonjour,
    Quel SGBD ?
    Et combien de mots séparés par des ; ?
    Un nombre fixe ou une infinité ...

    Je pensais à la fontion PostgreSQL SPLIT_PART() ou STRING_SPLIT (Transact-SQL) etc.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Pourquoi ne décomposes-tu pas la chaine pour transformer les valeurs en lignes? Ce serait plus simple à comparer. Quelle est la BDD?

  4. #4
    Membre habitué
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Par défaut
    Bonjour à vous deux,
    Je travaille avec PGAdmin III sur PostgreSQL 9.6.
    Les boîtiers sont composés de 14 caractères et séparés par un point virgule.
    Le nombre de boîtiers est variable (ne sera jamais fixe, voire est même souvent vide car des poteaux n'ont pas de boîtiers), mais ne dépassera que rarement 4 ou 5 boîtiers (voire jamais... les poteaux c'est juste pour formaliser quelque chose ici).

    Pourquoi ne décomposes-tu pas la chaine pour transformer les valeurs en lignes?
    C'est ce que j'aimerais bien faire oui ! Pour pouvoir les réordonnée et pouvoir les comparer !

    Je pensais à la fontion PostgreSQL SPLIT_PART() ou STRING_SPLIT (Transact-SQL) etc.
    Je vais creuser ces fonctions merci !

    Merci !

  5. #5
    Membre habitué
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Par défaut
    SPLIT_PART fonctionne bien.
    J'ai donc autant de colonnes que de SPLIT_PART, et donc de boîtiers.
    Désormais je dois essayer de créer une dernière colonne qui concatène tous ces boîtiers dans l'ordre ASC.

  6. #6
    Membre habitué
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Par défaut
    J'ai trouvé ça mais ça ne marche que pour deux valeurs...
    https://dba.stackexchange.com/questi...nd-then-concat
    et encore, lorsqu'il y en a une seule, un point-virgule se trouve au début du concat...

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MATHIEUGODARD Voir le message
    C'est ce que j'aimerais bien faire oui ! Pour pouvoir les réordonnée et pouvoir les comparer !
    Ce que demande vanagreg, c'est surtout pourquoi :
    - Dans la base de données, les boîtiers ne sont pas stockés comme sous-lignes des poteaux (ainsi, n lignes de boîtiers par poteau)
    - Et pourquoi dans l'application 1/ la saisie se fait sur une ligne avec des points virgules plutôt qu'un champ par boîtier 2/ pourquoi l'application ne découpe-t-elle pas la saisie pour envoyer au SGBD une ligne par boîtier

    En effet, une colonne dans la base de donnée doit toujours ne contenir qu'une et qu'une seule valeur : là vous allez au devant de gros problèmes de performance, de maintenabilité... et d'évolutivité ! (genre impossible de gérer l'intégrité si un jour vous avez une table avec la liste des codes des boîtiers)

  8. #8
    Membre habitué
    Homme Profil pro
    Chargé d'études
    Inscrit en
    Mai 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'études

    Informations forums :
    Inscription : Mai 2020
    Messages : 11
    Par défaut
    - Dans la base de données, les boîtiers ne sont pas stockés comme sous-lignes des poteaux (ainsi, n lignes de boîtiers par poteau)
    Dans notre MCD d'étude (c'est de la cartographie), j'ai un shape poteaux, et un shape boitiers.
    Le contrôle que je réalise est fait à partir d'un string_agg qui me permet de générer cette liste à partir d'une jointure spatiale.
    Une fois l'étude terminée, le MCD entier est transformé dans un autre MCD pour livraison client. Je ne peux pas changer le format d'étude en milieu de projet et encore moins demander au client qu'il change son cahier des charges
    Et pourquoi dans l'application 1/ la saisie se fait sur une ligne avec des points virgules plutôt qu'un champ par boîtier 2/ pourquoi l'application ne découpe-t-elle pas la saisie pour envoyer au SGBD une ligne par boîtier
    1/ C'est la demande du client, je n'ai pas la main sur le remplissage de ce champ.
    2/ Mes données d'entrées sont comme tel : un shape poteaux, et un shape boitiers où, spatialement, plusieurs boitiers peuvent être superposés au poteau.
    En résumé, il n'est pas difficile pour moi de faire une liste des boîtiers présents sur un poteau grâce à une jointure spatiale. En revanche, vérifier la chaîne de caractères que je reçois en entrée de contrôle (de mes collègues, avant de transformer en MCD client) est plus compliqué. J'ai bien une solution en tête mais ce n'est pas hyper propre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] filtrer les éléments d'un champ "recherche" dans sharepoint 2010e
    Par francis.richter dans le forum SharePoint
    Réponses: 1
    Dernier message: 10/06/2011, 08h45
  2. Réponses: 6
    Dernier message: 19/11/2010, 18h27
  3. Lister les éléments d'un champ avec une formule
    Par noob77 dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 26/05/2009, 11h46
  4. Compter les éléments dans un champ
    Par sucreMan dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 22/05/2008, 12h11
  5. Réponses: 6
    Dernier message: 17/10/2006, 19h55

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