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 :

Simplification d'un select case


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 105
    Points : 75
    Points
    75
    Par défaut Simplification d'un select case
    Bonjour,

    J'aimerai afficher comme dans la requete suivante le libellé du client ou du fournisseur suivant les cas. Cette requete fonctionne mais elle me fait répéter le case. Existe t'il une solution plus courte?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT (CASE WHEN ctr.FACTURANT='1' THEN ctr.FACTURE
    	                      ELSE ctr.FACTURANT 
                          END)||' - '||tir.LIBELLE "Fournisseur/Client"
    FROM CONTRAT ctr,TIERS tir
    WHERE (CASE WHEN ctr.FACTURANT='1' THEN ctr.FACTURE
    	 	   ELSE ctr.FACTURANT 
    END)=tir.TIERS

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT (CASE WHEN ctr.FACTURANT='1' THEN ctr.FACTURE
    	                      ELSE ctr.FACTURANT 
                          END)||' - '||tir.LIBELLE "Fournisseur/Client"
    FROM CONTRAT ctr JOIN TIERS tir 
    ON (tir.TIERS = ctr.FACTURE OR  tir.TIERS = ctr.FACTURANT)
    Sauf erreur, cela ne revient-il pas au même que la requête d'origine ?

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par Mercure
    Sauf erreur, cela ne revient-il pas au même que la requête d'origine ?
    Je n'ai pas testé mais pas nécessairement.
    Cela dépend des données dans les tables ; imaginons le cas suivant :
    ctr
    FACTURANT...FACTURE
    1....0

    tir
    TIERS
    1
    Votre requête permet d'associer ces 2 lignes par ctr.FACTURANT = tir.TIERS alors que la requête de nellynew ne les associe pas !

    Donc, votre simplification est incorrecte (mais bien tentée ).

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Une alternative testée sous Oracle 10gR1 comme vous n'avez pas précisé votre SGBD :
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    10g SOC5> DROP TABLE DVP;
     
    Table supprimée.
     
    10g SOC5> CREATE TABLE DVP(X NUMBER);
     
    Table créée.
     
    10g SOC5> 
    10g SOC5> INSERT INTO DVP VALUES (1);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (2);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (3);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (4);
     
    1 ligne créée.
     
    10g SOC5> INSERT INTO DVP VALUES (5);
     
    1 ligne créée.
     
    10g SOC5> 
    10g SOC5> SELECT X, COND
      2  FROM   (SELECT X,
      3                 CASE
      4                   WHEN MOD(X,2) = 0 THEN 'PAIR'
      5                   ELSE 'IMPAIR'
      6                 END AS COND
      7          FROM   DVP)
      8  WHERE  COND = 'PAIR';
     
             X COND
    ---------- ------
             2 PAIR
             4 PAIR
     
    2 ligne(s) sélectionnée(s).

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  2. Simplification d'un select case
    Par portecd dans le forum VBA Access
    Réponses: 5
    Dernier message: 29/11/2007, 23h17
  3. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 4
    Dernier message: 15/05/2006, 14h40
  4. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 12
    Dernier message: 06/01/2005, 15h33
  5. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h05

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