Oracle SQL:基于行的不同结果列表没有列值
Oracle SQL: Distinct list of results based row not having column value
我正在尝试根据列值限制我的行,但很难获得正确的语法。
鉴于:
create table acctprefs (acctid char(5),
prefcode char(3));
insert into acctprefs values ('10000', 'ABC');
insert into acctprefs values ('10000', 'DEF');
insert into acctprefs values ('10000', 'GHI');
insert into acctprefs values ('10001', 'ABC');
insert into acctprefs values ('10001', 'DEF');
insert into acctprefs values ('10001', 'GHI');
insert into acctprefs values ('10001', 'ZZZ');
我想要 return 没有 'ZZZ' 首选项的不同帐户列表。在这种情况下,我试图得到一个简单的结果:
10000
我可以通过下面的查询获得 'ZZZ' 的不同帐户,但我只需要相反的。
select *
from
acctprefs ap
where
ap.prefcode in
(select ap.prefcode from acctprefs ap group by ap.prefcode having(ap.prefcode = 'ZZZ'));
一种方法是使用 having
子句进行聚合:
select ap.acctid
from acctprefs ap
group by ap.acctid
having sum(case when ap.prefcode = 'ZZZ' then 1 else 0 end) = 0;
having
子句计算每个账户的ZZZ数量。 . .和 returns 只有那些零。
一种方法是使用 minus
.
select acctid
from acctprefs
where arefcode <> 'ZZZ'
minus
select acctid
from acctprefs
where arefcode = 'ZZZ'
获取不具有该值的所有内容 - select 具有该值的所有内容并减去它。
Select distinct acctid
from acctprefs
where acctid NOT IN (select acctid
from acctprefs
where prefcode = 'ZZZ')
祝你好运
我正在尝试根据列值限制我的行,但很难获得正确的语法。
鉴于:
create table acctprefs (acctid char(5),
prefcode char(3));
insert into acctprefs values ('10000', 'ABC');
insert into acctprefs values ('10000', 'DEF');
insert into acctprefs values ('10000', 'GHI');
insert into acctprefs values ('10001', 'ABC');
insert into acctprefs values ('10001', 'DEF');
insert into acctprefs values ('10001', 'GHI');
insert into acctprefs values ('10001', 'ZZZ');
我想要 return 没有 'ZZZ' 首选项的不同帐户列表。在这种情况下,我试图得到一个简单的结果:
10000
我可以通过下面的查询获得 'ZZZ' 的不同帐户,但我只需要相反的。
select *
from
acctprefs ap
where
ap.prefcode in
(select ap.prefcode from acctprefs ap group by ap.prefcode having(ap.prefcode = 'ZZZ'));
一种方法是使用 having
子句进行聚合:
select ap.acctid
from acctprefs ap
group by ap.acctid
having sum(case when ap.prefcode = 'ZZZ' then 1 else 0 end) = 0;
having
子句计算每个账户的ZZZ数量。 . .和 returns 只有那些零。
一种方法是使用 minus
.
select acctid
from acctprefs
where arefcode <> 'ZZZ'
minus
select acctid
from acctprefs
where arefcode = 'ZZZ'
获取不具有该值的所有内容 - select 具有该值的所有内容并减去它。
Select distinct acctid
from acctprefs
where acctid NOT IN (select acctid
from acctprefs
where prefcode = 'ZZZ')
祝你好运