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

Développement SQL Server Discussion :

Requete SQL - IF EXIST


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Requete SQL - IF EXIST
    Bonjour,

    J'ai réalisé la requête SQL suivante (Je n'ai jamais utilisé de IF en SQL, c'est une première):
    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
    IF EXISTS
      (
        SELECT S.DATE_STERILISATION,L.DATE_UTILISATION
        FROM DATA_TEST.ODS_EUROMYCEL_SEIGLE S 	
        INNER JOIN DATA_TEST.ODS_EUROMYCEL_LIP L ON S.DATE_STERILISATION = L.DATE_UTILISATION-1 
      )
          ELSE
          (  
        SELECT S.DATE_STERILISATION,L.DATE_UTILISATION
        FROM DATA_TEST.ODS_EUROMYCEL_SEIGLE S 	
        INNER JOIN DATA_TEST.ODS_EUROMYCEL_LIP L ON S.DATE_STERILISATION = L.DATE_UTILISATION-2
         )
            ELSE
              (
                SELECT S.DATE_STERILISATION,L.DATE_UTILISATION
                FROM DATA_TEST.ODS_EUROMYCEL_SEIGLE S 	
               INNER JOIN DATA_TEST.ODS_EUROMYCEL_LIP L ON S.DATE_STERILISATION = L.DATE_UTILISATION-3 
               )
    END IF;

    Je souhaite réaliser une requête qui regarde si date_sterilisation = date_utilisation-1 existe alors on réalise la jointure
    sinon on regarde si date_sterilisation = date_utilisation-2 existe alors on réalise la jointure sinon on regarde si date_sterilisation = date_utilisation-3 existe et on réalise la jointure.

    La requête que j'ai réalisé ne fonctionne pas, j'ai le premier "else" qui est souligné en rouge. Donc si vous pouvez m'aiguiller à ce niveau là, ça m'aiderais.

    Merci d'avance .

  2. #2
    Invité
    Invité(e)
    Par défaut
    Franchement, vous auriez du prendre 30 secondes pour apprendre la syntaxe d'un IF ... ELSE au lieu de poster sur le forum : https://msdn.microsoft.com/fr-ca/library/ms182717.aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -- Syntax for SQL Server, Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse  
     
    IF Boolean_expression   
         { sql_statement | statement_block }   
    [ ELSE   
         { sql_statement | statement_block } ]

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Réponse à 7gyY9w1ZY6ySRgPeaefZ
    Merci pour cette réponse très utile !

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    vous ne pouvez pas faire de jointure conditionnelle tel que vous le faites avec un IF, qui est une structure de contrôle du langage TSQL.

    A première vue, vous pouvez effectuer trois jointures externes, et prendre la première colonne non null.

    Sur ce principe là (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT S.DATE_STERILISATION,COALESCE(L1.DATE_UTILISATION,L2.DATE_UTILISATION,L3.DATE_UTILISATION) AS DATE_UTILISATION
        FROM DATA_TEST.ODS_EUROMYCEL_SEIGLE S 	
        LEFT JOIN DATA_TEST.ODS_EUROMYCEL_LIP L1 ON S.DATE_STERILISATION = L.DATE_UTILISATION-1 
        LEFT JOIN DATA_TEST.ODS_EUROMYCEL_LIP L2 ON S.DATE_STERILISATION = L.DATE_UTILISATION-2 
        LEFT JOIN DATA_TEST.ODS_EUROMYCEL_LIP L3 ON S.DATE_STERILISATION = L.DATE_UTILISATION-3

    Exposez nous votre besoin fonctionnel, il y aura peut-être plus simple et/ou plus efficace

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 124
    Points : 51
    Points
    51
    Par défaut Réponse aieeeuuuuu
    Merci pour votre réponse, et vous venez de m'apprendre quelque chose

    Je vais essayer le code que vous m'avez envoyé en l'adaptant à mon besoin et je reviendrai une fois la solution trouvée

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

Discussions similaires

  1. Inclure une requete SQL dans un rapport existant
    Par souhail72 dans le forum Formules
    Réponses: 2
    Dernier message: 06/01/2014, 14h32
  2. requete SQL intersect/not exist
    Par Baldric de Dol dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/10/2008, 18h18
  3. Réponses: 2
    Dernier message: 08/11/2007, 11h54
  4. Réponses: 2
    Dernier message: 08/11/2007, 11h54
  5. [SQL] requete ajout si existant
    Par J_Yohan dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/04/2007, 16h53

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