sql如何动态选择字段作为条件来查询?

maosenmin 2010-08-31 04:34:04
数据库中有两个类似的字段类型A,类型B,外界传来一个参数。在sql语句中如何使当B字段不为空时就用B字段作为条件来匹配参数,当B字段为空时就用A字段作为条件来筛选?
...全文
514 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2010-08-31
  • 打赏
  • 举报
回复
楼主,应该去测试一下,而不要去猜测
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([a] int,[b] int)
insert [tb]
select 1,2 union all
select null,3 union all
select 1,3 union all
select 3,null
go

select *
from tb
where case when b is null or b=1 then a else b end=3

/**
a b
----------- -----------
NULL 3
1 3
3 NULL
**/
GUOCHENGJUN 2010-08-31
  • 打赏
  • 举报
回复
对每条记录返回一个值去和条件批配
maosenmin 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 josy 的回复:]

where case when b is null or b=1 then a else b end=条件
[/Quote]
这个不行。case when 返回来的好像只能是具体的值(数字)。
百年树人 2010-08-31
  • 打赏
  • 举报
回复
where case when b is null or b=1 then a else b end=条件
maosenmin 2010-08-31
  • 打赏
  • 举报
回复
那如果要求B字段为空或B字段的值为1的时候都用A字段,其他都用B字段呢?
百年树人 2010-08-31
  • 打赏
  • 举报
回复
isnull(B,A)=条件

水族杰纶 2010-08-31
  • 打赏
  • 举报
回复
--try
where isnull(b,a)=@参数
喜-喜 2010-08-31
  • 打赏
  • 举报
回复
isnull(B,A)
noteasytoregister 2010-08-31
  • 打赏
  • 举报
回复
SELECT *
FROM TB
WHERE COALESCE(A,B)=@PARAM

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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