Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2011, 16h12   #1
Membre du Club
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 47
Points : 47
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 :
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,
OCB37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 16h26   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 :
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é.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 16h40   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Pour votre problème, voici de quoi vous donner une idée :
Code :
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)
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 17h12   #4
Membre du Club
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 47
Points : 47
Merci pour votre aide.

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

Merci.
OCB37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h14.


 
 
 
 
Partenaires

Hébergement Web