如何在Where条件中使用Case语句!!!

skyclin 2006-08-30 04:25:12
有一条语句:
declare @IsShow Int
Select ......
From Z Left Join B On Z.id=B.id
Where Case @IsShow When 1 Then Z.id='0101' When 2 Then Z.id like '01%' end

我想根据@IsShow变量中值不同,过虑不同的数据!!
可惜的是,这条件语句是错的。

各位高手明白我的意思没? 有何解决方法?
...全文
918 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomiwang_ft 2006-08-30
  • 打赏
  • 举报
回复
declare @IsShow Int
select @IsShow=1

如是不同的操作符可用下面的方式
Select *
From SO
Where (SONUM = case @IsShow When 1 Then 'D3990001' end ) or (SONUM like case @IsShow When 2 Then 'D3A370261' end )

如是相同的操作符可用下面的方式
Select *
From SO
Where SONUM like ( case @IsShow When 1 Then 'D3990001%' When 2 Then 'D3A370261%' end )
Jane_64 2006-08-30
  • 打赏
  • 举报
回复
declare @IsShow Int
Select ......
From Z Left Join B On Z.id=B.id
Where (case when @IsShow=1 and Z.id='0101' then 1
when @IsShow=2 and Z.id like '01%' then 1
else 0
end) = 1
chuifengde 2006-08-30
  • 打赏
  • 举报
回复
exec('Select ......
From Z Left Join B On Z.id=B.id
Where Z.id '+Case @IsShow When 1 Then '=''0101''' When 2 Then 'like ''01%''' end)
j9988 2006-08-30
  • 打赏
  • 举报
回复
case when 只能返回值,不能返一个true OR false

所以这么改:
where
(case when @IsShow=1 and Z.id='0101' then 1
when @IsShow=2 and Z.id like '01%' then 1
else 0
end)=1

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧