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 :

Compréhension select ou where


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Février 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Compréhension select ou where
    Bonsoir à tous,
    Je suis un peu nweebie en SQL, j'essaye donc de m'en sortir en cherchant sur la toile.
    Je récupère un export XLS d'une base de donnée. Pour des raisons de sécurité je ne peux pas me connecter directement à la base.
    J'utilise LibreOfficeBase (en gros l'équivalent d'access) pour créer ma table et importer ce fichier excel dedans.
    Voila pour l'état des lieux.
    Ma table a une clef primaire, 1 champ numéro de suivi, 1 champs actions, 1 champ date d'action
    Je voudrais afficher chaque numéro de suivi ayant 2 actions bien précises : "prise en compte" et "cloture"
    J'arrive bien à afficher soit l'un soit l'autre, mais pour afficher les 2 en meme temps et encore mieux les numéros de suivi qui ont les 2 actions, je n'y arrive pas
    J'ai essayé le where... IN (x,x) mais cela ne prend qu'une des 2 actions bien entendu.
    Pourriez vous me lancer sur des pistes ?

    Merci bien
    Laurent

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 380
    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 380
    Points : 39 862
    Points
    39 862
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    Plusieurs possibilités

    Une auto-jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select T1.nsuiv
    from       ma_table as T1
    inner join ma_table as T2
       on t2.nsuiv = t1.nsuiv
    where t1.actions = 'prise en compte'
      and t2.actions = 'cloture'
    Un test d'existence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select T1.nsuiv
    from       ma_table as T1
    where exists
         (select 1
          from ma_table as T2
          where t2.nsuiv = t1.nsuiv
            and t2.actions = 'cloture')
      and t1.actions = 'prise en compte'
    Par contre, vous n'avez pas précisé s'il fallait uniquement ces deux valeurs d'action ou au moins les deux
    S'il ne faut que ces deux valeurs, il faut ajouter un test de non existence (not exists)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Février 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je viens de tester les 2 solutions et cela fonctionne super !!
    Merci beaucoup.

    Du coup j’enchaîne avec une autre question :
    Est-il possible d'avoir tout sur 3 colonnes au lieu de 5, je m'explique :
    Ce que j'arrive à afficher :
    T1.nsuiv | T1 actions | T1 Date actions | T2 actions | T2 Date actions
    Ce que j'aimerai si possible :
    T1.nsuiv | T1 et T2 actions | T1 et T2 Date actions

    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 34
    Points : 179
    Points
    179
    Par défaut
    Bonjour Laurent,

    Tu peux "concatener" le résultat de ton select avec le signe + entre tes champs dans ton instruction SELECT.

    Exemple :

    Select T1.nsuiv + T2.actions
    From...

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Février 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je me suis mal exprimé.
    En fait il faudrait pour le meme nsuivi

    nsuivi | actions | date
    ------------------------------------
    nsuivi47 | action1 | date action1
    nsuivi47 | action2 | date action2

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 380
    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 380
    Points : 39 862
    Points
    39 862
    Billets dans le blog
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select T1.nsuiv
         , T1.actions
         , T1.dtaction
    from       ma_table as T1
    where T1.actions in ('prise en compte', 'cloture')
      and exists
         (select 1
          from ma_table as T2
          where t2.nsuiv = t1.nsuiv
            and t2.actions in ('prise en compte', 'cloture')
            and t2.actions<>t1.actions)

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Février 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci Escartefigue pour ta réponse qui est parfaite, tout me remonte bien
    Je n'ai pu tester qu'aujourd'hui étant sur d'autres sujets les jours passés

    Je bataille maintenant pour borner les dates, pour par exemple rechercher les actions sur la journée d'hier.
    Je suis passé entre temps sur SQL Server, j'ai eu la permission de faire quelques Select
    J'utilise pour cela cette ligne, que je rajoute aux 2 selects de ma précédente requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where (datepart(dd, T1.dtaction) BETWEEN datepart(dd,GETDATE())-'2' AND datepart(dd,GETDATE())-'1')
    Malheureusement cela me retourne bien à J-1 mais aussi du mois de Octobre de l'année dernière

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Février 2018
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'étais parti sur une mauvaise interprétation de la fonction datepart.

    Du coup j'ai utilisé CAST qui fonctionne à merveille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where  T1.dtaction> CAST(GETDATE()-1 as date) AND T1.dtaction < CAST(GETDATE() as date)
    Encore merci pour votre aide

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

Discussions similaires

  1. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 18h29
  2. [mysql 5]SELECT COUNT(*) + WHERE pseudo="$pseudo"
    Par rezareza dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/11/2006, 16h20
  3. probleme avec SELECT..FROM..WHERE
    Par VBBBA dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 08/09/2006, 16h58
  4. Pb de syntaxe sql : Sélection SELECT FROM WHERE vide
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 31/07/2006, 16h54
  5. [hibernate][spring]requete select from where IN
    Par whilecoyote dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/04/2006, 10h06

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