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 :

Select et condition


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Select et condition
    Bonsoir,

    Je viens vers vous, car je suis bloquée. Ci-après le bout de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT   A
    FROM table1 T1
         INNER JOIN table2 T2 
         ON T1.A=T2.A
    WHERE T1.A =54
    AND (((B <= TO_DATE('10/12/2014','DD/MM/YYYY'))
            AND (C>= TO_DATE('01/06/2014','DD/MM/YYYY')))
            OR ((B<= TO_DATE('10/12/2014','DD/MM/YYYY'))  
            AND(((C) is null))))
    AND ((T2.D BETWEEN TO_DATE('01/06/2014','DD/MM/YYYY')
        AND TO_DATE('10/12/2014','DD/MM/YYYY')))

    Je fais une sélection sur une période définie.
    Pour cette période, si je n'ai pas d'enregistrement sélectionné, je souhaite alors récupérer la valeur maxi de T2. Est-ce possible? Je ne vois pas comment traduire cela en SQL. Merci pour votre aide, je débute.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Utilisez une sous requête corrélée avec NOT EXISTS.

    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/ * * * * *

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    2 remarques :
    - ici il n'y a que 2 tables, mais d'une facon générale, j'évite les alias t1, t2, à remplacer par
    des alias plus parlants (exemple : TB_Contrat, TB_Client, TB_Article...) ce qui facilite la lecture quand
    de nombreuses tables sont utilisées en jointure

    - c'est également beaucoup plus clair en alignant les niveaux de décision équivalents comme suit :
    (j'ai aussi supprimé pour la même raison 2 niveaux de parenthèses inutiles autour de "C is null"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      [. . .]
      AND (   (    (B <= TO_DATE('10/12/2014','DD/MM/YYYY'))
               AND (C >= TO_DATE('01/06/2014','DD/MM/YYYY'))
              )
           OR (   (B<= TO_DATE('10/12/2014','DD/MM/YYYY'))  
               AND C is null
              )
          )
      [. . .]
    Pour ce qui concerne la méthode, voici une possibilité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     SELECT SUB1.DTSEL, SUB2.DTALL          
     FROM(SELECT MAX(MADATE) AS DTSEL       
          FROM MATABLE                      
          WHERE COL1= :HostVar1          
            AND COL2= :HostVar2     
         ) AS SUB1,                         
         (SELECT MAX(MADATE) AS DTALL       
          FROM MATABLE                      
         ) AS SUB2                          
     WITH UR ;                              
    ;

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Autre remarque :

    Si la table est volumineuse et qu'il y a souvent des cas où la recherche est infructueuse, on va parcourir séquentiellement autant de fois toute la table !
    Attention donc aux performances, en environnement de test en général tout va bien faute de volumes significatifs, mais à partir de la pré-production ça risque de coûter très cher.

    Il est donc préférable de rechercher la valeur maxi une fois pour toutes en début de traitement (celle par défaut si non trouvée).

    Dans ce cas, il vaut mieux 2 requêtes, une en début de prog exécutée une seule fois (sub2 dans mon exemple), et une autre exécutée pour chaque critère fonctionnel (sub1)

  5. #5
    Candidat au Club
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci de vos conseils
    Je testerai tout cela au plus vite
    Bonne soirée

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/05/2007, 15h06
  2. Pré-statement et select sans condition
    Par weed dans le forum Installation
    Réponses: 2
    Dernier message: 21/11/2006, 16h20
  3. SELECT et conditions
    Par metalcoyote dans le forum Oracle
    Réponses: 6
    Dernier message: 20/04/2006, 15h38
  4. [HyperFile] requete de selection avec condition de comptage
    Par pierre.zelb dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 16/02/2006, 10h20
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h51

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