2 votes

sql où contre deux colonnes

J'ai créé un SP pour renvoyer des données clients pour une entreprise. Je transmets l'identifiant de la société et l'identifiant du client au SP. Il y a deux types d'identifiants de clients dans la table que j'interroge. Les deux types sont enregistrés dans des colonnes différentes.

Par exemple, disons que j'ai les colonnes suivantes dans mon tableau.

ID,Commentaires,CustomerTypeAId,CustomerTypeBId

L'un ou l'autre des identifiants du client peut être nul dans une ligne. L'ID du client que je transmets au SP peut être un client de type A ou de type B. Dans ma clause WHERE, je dois donc spécifier que si le CustomerTypeAId est nul, je dois interroger le CustomerTypeBId.

@CusId int=0
SELECT * FROM TEST
WHERE (How to put this part?)

1voto

John Woo Points 132738

Vous pouvez utiliser OR en su where puisqu'il peut s'agir de n'importe laquelle des deux colonnes.

SELECT * 
FROM   TEST
WHERE  CustomerTypeAId = @id OR
       CustomerTypeBId = @id

1voto

Gordon Linoff Points 213350

Je pense que ce qui suit fait ce que vous voulez :

select *
from test
where CustomerTypeAid = @CustId or CustomerTypeBid = @CustId

NULL est souvent un problème dans les déclarations booléennes ; cependant, il fonctionne bien avec OR.

0voto

Aaron Bertrand Points 116343
WHERE @CusId IN (CustomerTypeAId, CustomerTypeBId);

Toutefois, pourquoi stockez-vous ces valeurs dans des colonnes distinctes ? Allez-vous ajouter encore une autre colonne lorsque vous introduisez le type C ? Au lieu de cela, vous devriez simplement avoir une colonne de type et une colonne CustomerID. De cette façon, lorsque vous ne vous souciez pas de leur type, vous n'avez qu'à utiliser la colonne CustomerID.

0voto

On dirait que vous avez besoin de quelque chose comme :

SELECT * 
FROM TEST 
WHERE CustomerTypeAId = @id 
      OR (CustomerTypeAId IS NULL AND CustomerTypeBId = @id)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X