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 :

Requête SQL en fonction d'un champ d'un enregistrement


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2008
    Messages : 157
    Par défaut Requête SQL en fonction d'un champ d'un enregistrement
    Bonjour à tous,

    Je travaille actuellement avec Visual Studio pour faire du Reporting Services sur une base de données.

    Je suis face à un problème.

    Voici ce que je voudrais faire :

    Récupérer la liste de tous les acheteurs, si l'acheteur passé en paramètre dispose de l'autorisation sinon renvoyer seulement cet acheteur.

    J'ai essayé plusieurs choses :

    Cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT     DISTINCT C_acheteur
    FROM       Acheteur
    WHERE     (
                    (
                          (Login_Windows = @p_Login) 
                      AND (Autorisation_RS = 0)
                    )  
          OR
                    (
                          (C_acheteur IN
                                        (SELECT     DISTINCT C_acheteur
                                         FROM          Acheteur AS Acheteur_1))
                    )
              )
    Le problème c'est que le OR n'est pas soit l'un, soit l'autre.
    Donc il me ramène systématiquement toute la liste.

    J'ai aussi essayé de passer par un CASE, mais sans grand succès. Donc si quelqu'un à une idée ou veut plus d'informations : je suis preneur.

    Cordialement,

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Citation Envoyé par OCB37 Voir le message
    Le problème c'est que le OR n'est pas soit l'un, soit l'autre.
    Donc il me ramène systématiquement toute la liste.
    Affirmation, qui fort heureusement est sans fondement.

    C'est juste que votre second critère est toujours vrai, c'est pour cela que la requête renvoie toutes les lignes, j'ai enlevé le superflu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT C_acheteur
      FROM Acheteur
     WHERE <Condition1>
        OR C_acheteur IN (SELECT C_acheteur FROM Acheteur)
    Vous avez écrit :
    "Je veux tous les codes acheteur de la table acheteur dont <condition1> ou dont les codes acheteur font partie de la liste des codes acheteur de la table acheteur."

    Oui, c'est capilo-tracté et probablement inutile, mais c'est bien ce que vous avez codé.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Pour votre problème, voici de quoi vous donner une idée :
    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
    declare @login char(1)
    set @login = 'A'
     
    ;with matable (col1, col2) as
    (
    select 'A', 1 union all
    select 'B', 1 union all
    select 'C', 0 union all
    select 'D', 0 
    )
    select mt1.col1, mt1.col2
      from matable as mt1
           cross join matable as mt2
     where mt2.col1 = @login
       and (mt2.col2 = 1
        or  mt1.col1 = @login)

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2008
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2008
    Messages : 157
    Par défaut
    Merci pour votre aide.

    Je vais analyser tout ça pour bien comprendre.
    En tous cas j'ai compris mon erreur.

    Merci.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2012, 11h59
  2. Requête SQL pour concaténer un même champs
    Par aureliegro dans le forum IHM
    Réponses: 14
    Dernier message: 18/12/2007, 15h00
  3. [SQL] Requête SQL en fonction d'un choix de listbox
    Par Lenezir dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/11/2007, 16h08
  4. [Requête/SQL]Probleme fonction compte
    Par choupi2a dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/04/2007, 06h04
  5. [MySQL] Filtrage par ma requête sql en fonction du résultat d'un combo box
    Par digger dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/02/2006, 17h25

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