繁体   English   中英

SQL 子句中的条件 WHERE

[英]Conditional WHERE in SQL clause

我需要根据参数的值设置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的第一部分。 我怎样才能做到这一点?

您可以添加OR

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

您可以使用逻辑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')

似乎用 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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM