我试图通过几个bolgs搜索,但是我仍然在使用Where子句中的SQL案例中遇到问题。有人可以帮帮我吗?以下是场景 -
我有一个表Client_Master,我必须创建一个存储过程来显示:
我尝试将SQL代码编写为 -
CREATE PROCEDURE ClientSearchList
--Exec ClientSearchList
AS
SET NOCOUNT OFF
BEGIN
Declare @Filter Varchar(10)
Set @Filter = Null
SELECT DISTINCT client_Name FROM M_CLIENT_MASTER
Where case
WHEN @Filter = 'ALL' THEN Client_id <> 0 AND Activate = 0
WHEN @Filter = 'TATA' THEN Client_id <> 0 and Activate = 0 and (Client_Name like '%Tata%' OR Client_Type=9)
WHEN @Filter = 'CONCEPT' THEN
IF @@ERROR <> 0 GOTO ERRORHANDLER**
SET NOCOUNT OFF
RETURN(0)
ERRORHANDLER:
RETURN(@@ERROR)
END
请建议一种方法来实现这一目标。
谢谢, 维迪亚
答案 0 :(得分:6)
我不知道为什么刚接触SQL的人似乎只需要CASE
1 ,而他们只需要布尔运算符 - 他们肯定会在其他语言中使用相同类型的运算符:
Where
(@Filter = 'ALL' AND Client_id <> 0 AND Activate = 0) OR
(@Filter = 'TATA' AND Client_id <> 0 and Activate = 0 and
(Client_Name like '%Tata%' OR Client_Type=9)) OR
(@Filter = 'CONCEPT' AND ... )
问题使CONCEPT
分支不完整,所以答案也是如此。此外,前两个分支看起来有一些相似之处,因此可以简化:
Where
(Client_id <> 0 AND Activate = 0 AND
(@Filter = 'ALL' OR
(@Filter = 'TATA' AND
(Client_Name like '%Tata%' OR Client_Type=9)
)
)
) OR
(@Filter = 'CONCEPT' AND ... )
1 CASE
是表达式 - 它计算单个值。这不是某种形式的控制流程。 在SELECT
语句中没有任何此类控制流构造。
答案 1 :(得分:0)
也许这对你有用
Select
ProductID
OrderNo,
OrderType,
OrderLineNo
From Order_Detail
Where ProductID in (
Select Case when (@Varibale1 != '')
then (Select ProductID from Product P Where .......)
Else (Select ProductID from Product)
End as ProductID
)