不同条件where查询字段不同,SQL怎么写

当B表有数据时---------- select count(*) from b 

select a1,a2 from  a  where  a1='**'  and  b1='**'

当B表没有数据时

select a1,a2 from  a  where  a1='**' 

这种不同情况查询条件不同的SQL怎么写,sqlserver。

我直接在where后面写case when 总是报错。

select * from RD_Craft where status != 0 and userright like '%,${fine_username},%' case when (select COUNT(*) from fine_user t1  left join  fine_user_role_middle t2 on t1.id = t2.userid  where t2.roleid  = 'a89c174d-5938-4a94-b642-f836af54cb33' and username ='${fine_username}') > 0 then "and 1=2" else "and 1=1" end

UNION all

select * from RD_Craft where status != 0  case when (select  COUNT(*) from fine_user t1  left join  fine_user_role_middle t2 on t1.id = t2.userid  where t2.roleid  = 'a89c174d-5938-4a94-b642-f836af54cb33' and username ='${fine_username}') > 0 then "and 1=1" else "and 1=2" end


FineReport 长路漫浩浩 发布于 2020-11-14 23:22 (编辑于 2020-11-15 14:39)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
zsh331Lv8专家互助
发布于2020-11-15 12:03

一个问题可以使用多种解决方案,提供其中一种,根据题意,SQL语法大概可以定义为:


select a1,a2 from  a  where  a1='**'  and  b1='**'
case when (select count(*) from b)>0 then “ and 1=1” else “ and 1=2” end

union all

select a1,a2 from  a  where  a1='**' 

case when (select count(*) from b)>0 then “ and 1=2” else “ and 1=1” end


— 注意:引号等符号,要使用英文状态输入。


  • 长路漫浩浩 长路漫浩浩(提问者) 这种SQLSERVER 是不是不支持。我写的语法报错
    2020-11-15 14:40 
  • 长路漫浩浩 长路漫浩浩(提问者) select a1,a2 from a where a1=\'**\' and b1=\'**\' and ( case when (select count(*) from b)>0 then 1 else 2 end ) =1 稍微改改这样就可以了,感谢提供的解决思路
    2020-11-15 15:00 
  • zsh331 zsh331 回复 长路漫浩浩(提问者) = = 你是不是把and前面的空格删掉了。
    2020-11-15 17:26 
  • 2关注人数
  • 921浏览人数
  • 最后回答于:2020-11-15 14:39
    请选择关闭问题的原因
    确定 取消
    返回顶部