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 :

Petit problème un peu tordu


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Petit problème un peu tordu
    Bonjour,

    je sèche sur un problème en apparence simple:
    je dispose d'une table de comptes simplifiée comme suit:

    Compte
    - Code (char 20)
    - Type (char 10)

    Type peut être vide ou contenir la chaine "collectif" ou encore "courant"

    Ma requete semble simple, je veux récupérer tous les comptes dont le code ne commence pas par un code de collectif + les collectifs eux meme.

    Exemple:
    code type
    '411TETARD' 'courant'
    '411MARTIN' 'courant'
    '482803' ''
    '411' 'collectif'

    => la requête devrait me retourner
    '482803' car aucun collectif n'en est la racine
    '411' car c'est un collectif

    J'ai commencer par faire la requête suivante qui marche très bien mais suppose que tous les collectifs ont un code de longueur unique (ici 3), or ce n'est pas le cas, un collectif pourra contenir 3 caractère (ex: 411) et un autre 4 (ex: 6008):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT
         COMPTE,
         LEFT(COMPTE,3) AS Caracteres
    FROM
         COMPTES
    WHERE
         Caractere NOT IN (SELECT COMPTE FROM COMPTES WHERE TYPE_COMPTE = 'Collectif')
         OR TYPE_COMPTE = 'Collectif')
    J'espère ne pas avoir été trop brouillon, merci à tous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Quelque chose de ce style ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  cpt.compte
    FROM    comptes cpt
    WHERE   cpt.type_compte = 'Collectif'
        OR  NOT EXISTS
            (   SELECT  NULL
                FROM    comptes clf
                WHERE   clf.type_compte = 'Collectif'
                    AND cpt.compte  LIKE TRIM(clf.compte) || '%'
            )
    ;

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Ca marche, merci bien, je n'aurais pas trouver tout seul
    je tag comme résolu ^^

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

Discussions similaires

  1. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  2. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  3. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  4. Contraintes un peu tordu
    Par Jovial dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 15/04/2004, 16h57
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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