Sql WHERE子句中的CASE用法
代码如下:Sql WHERE子句中的CASE用法,sql,sql-server,Sql,Sql Server,代码如下: CREATE PROCEDURE [dbo].[PR_CDMS_ADMIN_GET_SECURITY_INFO] ( DECLARE @chvMajorCatgry varchar(50) DECLARE @chvMinorCatgry varchar(50) ) AS if (@chvMajorCatgry = 'yyy') begin select caf.ACTN_FACT_SID
CREATE PROCEDURE [dbo].[PR_CDMS_ADMIN_GET_SECURITY_INFO] (
DECLARE @chvMajorCatgry varchar(50)
DECLARE @chvMinorCatgry varchar(50)
)
AS
if (@chvMajorCatgry = 'yyy')
begin
select caf.ACTN_FACT_SID
from CDMS_ACTN_FACT caf
where caf.ACTN_SID in (select ACTN_SID from CDMS_ACTN where ACTN_CATGRY_CD = 'yyy')
print @chvMajorCatgry
end
print @chvMajorCatgry
else if (@chvMajorCatgry = 'zzz')
begin
select caf.ACTN_FACT_SID
from CDMS_ACTN_FACT caf
where caf.ACTN_SID = (select ACTN_SID from CDMS_ACTN where ACTN_CATGRY_CD = 'zzz' and ACTN_CD = @chvMinorCatgry)
end
如何处理这一点,使其具有一个select语句?Bleh,这很粗糙。试试这个:
select caf.ACTN_FACT_SID
from CDMS_ACTN_FACT caf
where caf.ACTN_SID IN (
select ACTN_SID
from CDMS_ACTN
where (
@chvMinorCatgry = 'zzz'
AND ACTN_CATGRY_CD = 'Attribute'
AND ACTN_CD = @chvMinorCatgry)
)
OR (
@chvMinorCatgry = 'yyy'
AND ACTN_CATGRY_CD = 'Account'
)
)
请看下面我的建议。根据ACTN_CD列的数据类型,您可能需要更改子查询中case语句末尾的通配符
CREATE PROCEDURE [dbo].[PR_CDMS_ADMIN_GET_SECURITY_INFO] (
@chvMajorCatgry varchar(50),
@chvMinorCatgry varchar(50)
--SET @chvMajorCatgry = 'Account'
)
AS
select caf.ACTN_FACT_SID
from CDMS_ACTN_FACT caf
where caf.ACTN_SID in (
select ACTN_SID
from CDMS_ACTN
where ACTN_CATGRY_CD = @chvMajorCatgry
and ACTN_CD like case @chvmajorcatgry when 'Attribute' then @chvMinorCatgry else '%' end)
我不需要任何if-else检查..我想要一个带有case in-where子句的语句..在实时代码中我有大约30个if-else语句,其中包含两种where子句变体..我在这里使用的代码示例仅限于这两种类型。