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

SQL Oracle Discussion :

Filtrage de valeur 'null' dans un select


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut Filtrage de valeur 'null' dans un select
    Bonjour à tous,

    voilà mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select id,descr from table
    Résultat:
    id descr

    1 null
    2 bla
    2 null
    3 null
    4 bla
    5 null

    Ma question est la suivante: Est-il possible de lui faire comprendre que si 2=bla alors on enlève la ligne qui est à null. Donc voici le résultat escompté.

    Résultat escompté:
    id descr

    1 null
    2 bla
    3 null
    4 bla
    5 null

    Merci infiniment

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    peut-etre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id,descr FROM TABLE
    minus 
    select id,null from table having count(descr)>0 group by id

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id,max(descr) from t group by id

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut Laurent,

    Mais tu scanes ta table deux fois.
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    SQL> WITH t AS
      2       (SELECT 1 ID, NULL descr
      3          FROM DUAL
      4        UNION ALL
      5        SELECT 2, 'bla'
      6          FROM DUAL
      7        UNION ALL
      8        SELECT 2, NULL
      9          FROM DUAL
     10        UNION ALL
     11        SELECT 3, NULL
     12          FROM DUAL
     13        UNION ALL
     14        SELECT 4, 'bla'
     15          FROM DUAL
     16        UNION ALL
     17        SELECT 5, NULL
     18          FROM DUAL)
     19  SELECT *
     20    FROM (SELECT t.*,
     21                 MAX (CASE
     22                         WHEN  descr = 'bla'
     23                            THEN 1
     24                      END) OVER (PARTITION BY ID) ind
     25            FROM t)
     26  WHERE ind IS NULL OR (ind = 1 AND descr IS NOT NULL);
     
            ID DES        IND
    ---------- --- ----------
             1
             2 bla          1
             3
             4 bla          1
             5
     
     
    Plan d'exécution
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=13 Card=6 Bytes=54
              )
     
       1    0   VIEW (Cost=13 Card=6 Bytes=54)
       2    1     WINDOW (SORT) (Cost=13 Card=6 Bytes=36)
       3    2       VIEW (Cost=12 Card=6 Bytes=36)
       4    3         UNION-ALL
       5    4           FAST DUAL (Cost=2 Card=1)
       6    4           FAST DUAL (Cost=2 Card=1)
       7    4           FAST DUAL (Cost=2 Card=1)
       8    4           FAST DUAL (Cost=2 Card=1)
       9    4           FAST DUAL (Cost=2 Card=1)
      10    4           FAST DUAL (Cost=2 Card=1)
     
     
     
    SQL>

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    merci infiniment pour la réponse

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Oui, la question semblait tellement basique que je ne voulais pas parler des fonctions analytiques.

    Il faut aussi savoir ce que l'utilisateur fait des bli blo blu et aussi si les bla peuvent etre a doubles, etc...

    De plus, ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> SELECT *
      2  FROM (SELECT t.*,
      3                   MAX (CASE
      4                           WHEN  descr = 'bla'
      5                              THEN 1
      6                        END) OVER (PARTITION BY ID) ind
      7              FROM lsc_t t)
      8  WHERE ind IS NULL OR (ind = 1 AND descr IS NOT NULL) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Execution Plan
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=CHOOSE (Cost=45 Card=19998 Bytes=459954)
       1    0   VIEW (Cost=45 Card=19998 Bytes=459954)
       2    1     WINDOW (BUFFER) (Cost=45 Card=19998 Bytes=119988)
       3    2       INDEX (FULL SCAN) OF 'LSC_I' (UNIQUE) (Cost=45 Card=19998 Bytes=119988)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> select * from lsc_t
      2  where descr is not null
      3    or id not in (select id from lsc_t where descr is not null);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Execution Plan
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=10499 Bytes=62994)
       1    0   FILTER
       2    1     TABLE ACCESS (FULL) OF 'LSC_T' (Cost=5 Card=10499 Bytes=62994)
       3    1     INDEX (RANGE SCAN) OF 'LSC_I' (UNIQUE) (Cost=2 Card=1 Bytes=6)
    Sans parler du fait que WINDOW(BUFFER) peut être mortel si la mémoire disponible est limitée !

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

Discussions similaires

  1. Garder valeur nulle dans combo non selected
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 23/09/2008, 18h58
  2. [delphi 7 / DOA] valeur null dans setvariable
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 05/11/2004, 10h14
  3. ASP et valeur NULL dans requêtes SQL
    Par chuck_m dans le forum ASP
    Réponses: 7
    Dernier message: 13/08/2004, 11h15
  4. Joindre une valeur arbitraire dans un SELECT
    Par Tuxxy dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/01/2004, 17h04
  5. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52

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