表字段如下:
ID STATUS其中STATUS是按位与的字段
假设bitand(status, 8)>0的记录类型为A
bitand(status, 4)>0的记录类型为B
bitand(status, 2)>0的记录类型为C
bitand(status, 1)>0的记录类型为D我想查询出该表中各种类型的数据数量,形式如下:类型 数量
A 12
B 1
C 32
D 0请问SQL该怎么写?
表数据量有20w左右,类型有大概10种
ID STATUS其中STATUS是按位与的字段
假设bitand(status, 8)>0的记录类型为A
bitand(status, 4)>0的记录类型为B
bitand(status, 2)>0的记录类型为C
bitand(status, 1)>0的记录类型为D我想查询出该表中各种类型的数据数量,形式如下:类型 数量
A 12
B 1
C 32
D 0请问SQL该怎么写?
表数据量有20w左右,类型有大概10种
select (case when bitand(STATUS,8) > 0 then 'A' when ..... end),count(*) from table
group by (case when bitand(STATUS,8) > 0 then 'A' when ..... end)
bitand(status, 8)>0
bitand(status, 4)>0
两个条件都满足 那么显示哪个类型?
--Oracle 11g Code
--测试表创建
create table ss
(
status number
)
--测试数据
insert into ss values(1)
insert into ss values(12);
insert into ss values(21);
insert into ss values(2);
insert into ss values(3);
insert into ss values(4);
insert into ss values(5);
insert into ss values(8);
insert into ss values(9);
--查询
select s.*,count(s.类型) from(
select
(case
when bitand(status,8)>0
then 'A'
when bitand(status,4)>0
then 'B'
when bitand(status, 2)>0
then 'C'
when bitand(status, 1)>0
then 'D'
end)as 类型
from ss) s
group by s.类型
order by s.类型
--数据结果
A 3
B 3
C 2
D 1
select *from (
select 'A' as 类型,count(1) from ss
where bitand(status,8)>0
union all
select 'B' as 类型,count(1) from ss
where bitand(status,4)>0
union all
select 'C' as 类型,count(1) from ss
where bitand(status,2)>0
union all
select 'D' as 类型,count(1) from ss
where bitand(status,1)>0) s
order by s.类型
--结果如下
A 3
B 4
C 2
D 5
--数据结果
A 3
B 4
C 2
D 5