连接条件取决于参数

Sun*_*Lim 1 sql t-sql stored-procedures sql-server-2005

我是一个sql新手,我使用的是mssql2005

我喜欢在输入参数上加入Action depnding.

CREATE PROCEDURE SelectPeriodicLargeCategoryData 
    @CATEGORY_LEVEL CHAR(1),
    @CATEGORY_CODE VARCHAR(9)
AS

...


JOIN CATEGORY_AD_SYS CAS WITH(NOLOCK)
ON CA.CATEGORY_ID = [[[[[   HERE      ]]]]
Run Code Online (Sandbox Code Playgroud)

在sql之上.
如果@CATEGORY_LEVEL = 'L'那时我喜欢加入 CAS.LCATEGORY

否则,如果@CATEGORY_LEVEL = 'M'我愿意加入 CAS.MCATEGORY

否则,如果@CATEGORY_LEVEL = 'S'我愿意加入 CAS.SCATEGORY

...

我怎样才能做到这一点?

Ale*_*lli 5

您可以使用如下CASE表达式:

CASE @CATEGORY_LEVEL  
     WHEN 'L' THEN CAS.LCATEGORY
     WHEN 'M' THEN CAS.MCATEGORY
     WHEN 'S' THEN CAS.SCATEGORY
END
Run Code Online (Sandbox Code Playgroud)

我不知道有多快,这将是一个JOINON条件(取决于查询优化器如何聪明也差不多了,当然了,所以你最好用真实的数据测量检查) -如果事实证明有不可接受的性能,我想你可以使用完全不同的SELECT语句,这取决于@CATEGORY_LEVEL最后的手段.