[英]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.