oracle一个字段多个值的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle一个字段多个值的问题相关的知识,希望对你有一定的参考价值。
现在一张表如同
id grayid
1 1,2
2 2,3
3 3,5
现在我要查出grayid包含1,2,3之间的任何一个的所有结果
形如一个人有管理员1的角色,又有管理员2的角色,其它人也是如此有多个角色,现要查出拥有管理员1、管理员2、管理员3角色中的任何一个角色的所有人员————
超过10的话, 也就是会有 1,11,12,23 这样的话。
那就要换个函数了。
也就是
WHERE
INSTR( ',' || grayid || ',' , ',1,' ) >0
OR INSTR( ',' || grayid || ',' , ',2,' ) >0
OR INSTR( ',' || grayid || ',' , ',3,' ) >0
注: 上面是 Oracle 的写法。
如果是 SQL Server , 把 || 修改为 + , 把 INSTR 修改为 CHARINDEX, 然后参数先后顺序换一下。追问
这样不行的,我的grayid有很多。,而且在人员表中的角色字段也有不定多个角色ID,不可能都一一 列出来的
追答你查询出来的是 多行 id? 还是 查询出来 1,2,3 ?
如果是 多行 id.
那就表关联一下。
SELECT
main.*
FROM
一张表 main JOIN ( 你的那个查询多个角色ID的子查询 ) t
ON (
INSTR( ',' || main.grayid || ',' , ',' || t.查询出来的角色ID || ',' ) >0
)
grayid like '1,%' or grayid like '2,%' or grayid like '3,%' or
grayid like '%,1' or grayid like '%,2' or grayid like '%,3' or
grayid in ('1','2','3'); 参考技术B select * from tabName where grayid like '%1%' or grayid like '%2%' or grayid like '%3%'追问
我的目标角色ID也是通过查出来的一组值,是不可能一一列出来的,这样肯定是行不通的
追答那你就用存储过程吧
先查询角色,然后循环查询出来的角色列表,根据角色编码去查询管理员,把查询出来的管理员放在一张临时表中
然后输出临时表
Oracle -- 多个count统计一张表中多个字段等于某值
摘录:https://www.linuxidc.com/Linux/2012-06/62894.htm
case when 条件 then 条件为真时的值 else 条件为假时的值 end
--单独查询统一某个字段等于某值的次数
select count(m.underwriteflag) from prpcmain m where m.underwriteflag=\'1\' ; --720407
select count(m.nationflag) from prpcmain m where m.nationflag=\'1\' --720422
--合并查询
select count(case when m.underwriteflag=\'1\' then 1 end)字段1,count(case when m.nationflag=\'1\' then 1 end)字段2 from prpcmain m;
以上是关于oracle一个字段多个值的问题的主要内容,如果未能解决你的问题,请参考以下文章
Oracle -- 多个count统计一张表中多个字段等于某值