1
votes

Conditionnel WHERE dans la clause SQL

Je dois mettre une condition WHERE , en fonction de la valeur d'un paramètre.

Voici la clause WHERE :

WHERE 
   T1.SalesPerson IN (
      SELECT VendorName FROM dbo.TB_grpVendor WHERE GroupName = @Group
   ) AND 
   (
     T0.DocDate >= @DateBegin AND T0.DocDate <= @DateEnd OR 
     T0.DocDate >= @DateBegin2 AND T0.DocDate <= @DateEnd2
   ) AND 
   T0.CANCELED <> 'Y'

La variable @Group est un paramètre. S'il est égal à "ALL" , je dois ignorer la première partie du WHERE . Comment puis-je faire cela?


1 commentaires

3 Réponses :


1
votes

Vous pouvez obtenir cette fonctionnalité avec l'opérateur logique ou :

WHERE (@Group = 'ALL' OR 
       T1.SalesPerson IN (SELECT VendorName FROM dbo.TB_grpVendor WHERE GroupName = @Group)) AND 
      (T0.DocDate >= @DateBegin AND T0.DocDate <= @DateEnd OR  
       T0.DocDate >= @DateBegin2 AND T0.DocDate <= @DateEnd2 ) AND 
      (T0.CANCELED <> 'Y')


0 commentaires

2
votes

Vous pouvez ajouter OR:

where (@Group = 'ALL' OR
       EXISTS (SELECT 1 
               FROM dbo.TB_grpVendor 
               WHERE VendorName = T1.SalesPerson AND GroupName = @Group
               )
       ) AND
       . . . 


0 commentaires

0
votes

Il semble que ce serait mieux géré avec un JOIN

INNER JOIN dbo.TB_grpVendor GV on T1.SalesPerson = GV.VendorName
    AND @GroupName IN ('All', GV.GroupName)
WHERE
(
    T0.DocDate >= @DateBegin AND T0.DocDate <= @DateEnd OR 
    T0.DocDate >= @DateBegin2 AND T0.DocDate <= @DateEnd2
)
AND T0.CANCELED <> 'Y'


0 commentaires