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 :

Selectionner des colonnes sur critère


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 46
    Points
    46
    Par défaut Selectionner des colonnes sur critère
    Bonjour !

    Existe-t-il un moyen en SQL de ne sélectionner que des colonnes qui satisfont certains critères ?

    Je m'explique --> une requête du genre :
    "Selectionner uniquement les colonnes dont les valeurs entre une date t1 et une date t2 sont strictement positives" (les autres colonnes n'ayant pas alors d'importance).

    Ou faut il sélectionner toutes les colonnes puis faire un traitement à postériori ?

    Merci pour vos réponses.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Pas dur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM taTable
    WHERE (date1 - date2) > 0

  3. #3
    Membre du Club Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Salut CinePhil.

    Cette requête que tu me donnes va me selectionner toutes les colonnes dans les lignes qui satisfont aux dates.

    Moi ce qui je voudrais c'est justement trier les colonnes dans ce résultat. Des colonnes qui -par exemple- ne sont pas NULL (il me sert à rien d'avoir un tableau de résultat de requête avec une colonne où il n'y a que des valeurs NULL).

    Je sais que j'ai du mal à expliquer et que ce n'est pas très clair Je m'en excuse

  4. #4
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select macolonne1, macolonne5, macolonne200
    from...

  5. #5
    Membre du Club Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Désolé je pense que j'ai pas été très explicite

    Je vais tenter de donner un exemple.

    Voila une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    col1    col2     col3
    --------------------
    null     null        3
    1        null        null
    2        null         4
    null    null          9
    Moi je voudrais par exemple que quelque soit le SELECT, il ne me retourne jamais la col2 car elle est toujours null....bien sûr je ne connais pas le contenu de la base avant de faire mon select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * from table WHERE col3>3
    va me retourner un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    col1    col2     col3
    --------------------
    2        null          4
    null    null          9
    et moi je voudrais omettre la colonne 2 car une colonne avec que des NULL n'est pas intéreressante pour mon appli, donc avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    col1    col3
    --------------------
    2           4
    null       9
    Donc une requête du style :

    SELECT ("COLONNES OÙ AU MOINS UNE VALEUR EST NON-NULL") FROM table where col3>0

    merci !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Non, c'est impossible en pur SQL.

    Il faut construire votre requête dans une procédure par exemple en fonction des résultats.

    Par contre il faut m'expliquer comment une application peut digérer un resultset dont la structure n'est pas figée.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Si les colonnes ne contiennent que des nombres, tu peux essayer un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT 
    CASE
      WHEN (SELECT SUM(Col1)
                FROM taTable
      ) > 0 THEN Col1
    END, 
    CASE
      WHEN (SELECT SUM(Col2)
                FROM TaTable
      ) > 0 THEN Col2
    FROM TaTable
    WHERE Col3 > 0

  8. #8
    Membre du Club Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup CinePhil.

    Je vais voir si ça marche tout à l'heure (bien qu'il faille l'adapter à mon cas qui est plus compliqué, mais j'ai bien compris ta requête et elle répond à ma problématique).

    Citation Envoyé par Waldar
    Par contre il faut m'expliquer comment une application peut digérer un resultset dont la structure n'est pas figée.
    Heu là je sais pas. Je bosse avec l'API JDBC (Java donc), avec laquelle j'injecte la query sql dans un statement, puis l'execute, et elle me renvoie une instance de classe ResultSet...

    Pour le moment je n'ai pas testé, mais implémenter cette fonctionnalité serait vraiment cool...tu penses que mon appli va faire la gueule ?

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Je n'ai malheureusement aucune compétence en API Java, si elle est très souple et qu'elle s'adapte automatiquement effectivement ça pourrait faire l'affaire, le mieux est de nous tenir au courant !

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 949
    Points : 5 848
    Points
    5 848
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Je n'ai malheureusement aucune compétence en API Java,
    Moi non plus, ceci dit je ne pense pas que ça gène, par contre cinephil, toi qui travaille sur de gros volume de données, utiliserais tu cette requête ?

    A moins d'un contexte type infocentre avec une interrogation sur une table des faits (dont toutes les colonnes sont des FK numériques et indexées) et encore ça se discute..., la solution procédurale me semble justifiée.

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Comme il y a une appli qui envoie la requête et va en traiter le résultat, j'aurais plutôt tendance à gérer dans l'appli les cas NULL plutôt que de compliquer la requête SQL pour si peu.
    Tout dépend aussi du volume de données concerné. Pas sûr qu'une boucle en java pour voir si une colonne du tableau de résultat est entièrement NULL afin de ne pas l'afficher soit plus rapide que la requête complexe en SQL. A tester.

  12. #12
    Membre du Club Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Ouais, en fait c'est plutôt ce que j'ai fait...sachant que mon appli doit être assez indépendante du SGBDR, je veux sortir le moins possible des sentiers battus concernant le SQL.

    J'ai plutôt géré ça avec une fonction dans l'appli. De plus étant donné que ceci n'est là (pour le moment) qu'à but d'affichage, j'ai simplement fait une fonction qui me retourne la liste des index des colonnes "non-significatives" (c'est à dire dans mon cas qui ne contiennent que des 0). Donc je ne touche pas au resultset, j'exclue juste les index concernés au moment de l'affichage.

    Cependant je me disais que peut-être cette fonctionnalité existait en SQL (mes compétences étant loin d'être énormes dans le domaine), ceci a donc éveillé ma curiosité

Discussions similaires

  1. Rajouter titre et nom des colonnes sur fichier texte
    Par pierre24 dans le forum ODS et reporting
    Réponses: 6
    Dernier message: 22/04/2008, 10h44
  2. Masquer / démasquer des lignes sur critère.
    Par marc56 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 28/02/2008, 01h54
  3. selectionner des donnees sur 3 tables
    Par DI_2007 dans le forum 4D
    Réponses: 5
    Dernier message: 05/09/2007, 15h44
  4. affichage des colonnes sur 2 lignes !
    Par DBA_doom dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/05/2007, 15h44
  5. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44

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