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?
3 Réponses :
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')
Vous pouvez ajouter OR
:
where (@Group = 'ALL' OR EXISTS (SELECT 1 FROM dbo.TB_grpVendor WHERE VendorName = T1.SalesPerson AND GroupName = @Group ) ) AND . . .
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'
Suggestion de lecture: Conditions de recherche dynamique dans T-SQL .