2012-10-24 144 views
1

问题很简单 - 我相信答案也可能很简单。有条件的WHERE子句

系统是SQL Server 2008 R2。

有一个存储过程sp_WHYWHYWHY需要3个参数 - 2个是日期,一个是供应商代码。

在声明中WHERE条款看起来是这样的:

OrderDate BETWEEN @StartDate AND @EndDate 
AND SupplierCode = @SupplierCode 

的业务流程发生了变化 - 因为它总是会。因此,现在在供应商代码中,只有一个供应商(比如YY)现在与另一个供应商(比如说ABC)在商业上保持一致。

因此代码在查询ABC时需要说 - 也包括YY

喜欢的东西

OrderDate BETWEEN @StartDate AND @EndDate 
AND SupplierCode = CASE WHEN @SupplierCode = 'ABC' THEN 'YY','ABC' ELSE @SupplierCode END 

我知道你也写不了这样的 - 不过这只是最后的结果应该是什么。

我该怎么做,真的吗?

感谢您抽出时间阅读&的答案。

+0

你有一个表,你跟踪supplierCodes的引用该对齐? –

回答

2

不要过时!您希望供应商代码匹配提供的值所提供的值为ABC,并且存储的供应商代码为YY

试试这个

AND ([SupplierCode] = @SupplierCode 
OR ([SupplierCode] <> @SupplierCode 
    AND @SupplierCode ='ABC' 
    AND [SupplierCode] = 'YY')) 
+1

必须将括号内的析取括起来,才能按预期工作。 –

+0

@KirkBroadhurst但是,这将带来ABC和YY无论如何。我的意思是如果用户在XYZ上发送,此代码将显示XYZ以及ABC和YY。我希望它能够弥合传递的价值。如果传递的值是ABC,则包含YY。否则使用传递的值。所以,即使传递的值是YY,它也应该只显示YY。希望澄清。 – CeeVei

+0

@CeeVei感谢您的解释;我想你说的是AndriyM。我已经更新了答案以反映。 –