Условно ГДЕ в предложении SQL - PullRequest
1 голос
/ 16 апреля 2020

Мне нужно поставить условие WHERE в зависимости от значения параметра.

Вот предложение 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'

Переменная @Group является параметр. Если оно равно "ALL", мне нужно игнорировать первую часть WHERE. Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020

Вы можете добавить OR:

where (@Group = 'ALL' OR
       EXISTS (SELECT 1 
               FROM dbo.TB_grpVendor 
               WHERE VendorName = T1.SalesPerson AND GroupName = @Group
               )
       ) AND
       . . . 
1 голос
/ 16 апреля 2020

Вы можете достичь этой функциональности с помощью логического оператора or:

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 голосов
/ 16 апреля 2020

Кажется, что это было бы лучше обрабатывать с помощью 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...