0

但是,我尝试通过几个 bolg 进行搜索,但我仍在为 Where Clause 中的 SQL 案例中的问题而苦苦挣扎。有人可以帮我吗?下面是场景——

我有一个表 Client_Master,我必须创建一个存储过程来显示:

  1. 当用户单击所有单选按钮时,来自所有客户的所有公司
  2. 当用户单击 Client1 单选按钮时,所有特定于仅 Client1 的公司
  3. 当用户单击 Client2 单选按钮时,所有特定于仅 Client2 的公司

我尝试将 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

请提出一种方法来使其正常工作。

谢谢,维迪亚

4

2 回答 2

6

我不知道为什么当 SQL 新手只需要布尔运算符时,他们似乎会达到CASE1 - 他们肯定在其他语言中使用相同类型的运算符:

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语句中使用。

于 2013-07-09T07:01:23.510 回答
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
)
于 2021-02-26T08:30:22.010 回答