我有一个如下表格(表中当然还有其他数据):
contentView
我试图仅在所有Col B值匹配时返回Col A的值,否则返回null。
这将用作另一个将传递Col A值的sql语句的一部分,即 从表中选择*,其中Col A = 1
我需要返回Col B中的值。上表中的正确结果是Red,Black
任何想法?
答案 0 :(得分:1)
怎么样?
Oracle 11g R2架构设置:
create table t( id number, color varchar2(20));
insert into t values(1,'RED');
insert into t values(1,'RED');
insert into t values(2,'BLUE');
insert into t values(2,'GREEN');
insert into t values(3,'BLACK');
查询1 :
select color from t where id in (
select id
from t
group by id having min(color) = max(color) )
group by color
<强> Results 强>: |颜色| | ------- | | RED | |黑色|
答案 1 :(得分:0)
如果您只想在A(而不是每一行)中使用值,请使用group by
:
select a
from table t
group by a
having min(b) = max(b);
注意:这会忽略NULL
个值。如果您想将它们视为附加值,请添加另一个条件:
select a
from table t
group by a
having min(b) = max(b) and count(*) = count(b);
使用count(distinct)
也很诱人。但是,一般情况下,count(distinct)
需要的处理工作量比min()
和max()
要多。
答案 2 :(得分:0)
您可以使用case
语句。
select cola,
case when max(colb) = min(colb) and count(*) = count(colb) then max(colb)
end as colb
from tablename
group by cola
答案 3 :(得分:0)
Oracle 11g R2架构设置:
create table t( id number, color varchar2(20));
insert into t values(1,'RED');
insert into t values(1,'RED');
insert into t values(2,'BLUE');
insert into t values(2,'GREEN');
insert into t values(3,'BLACK');
查询1 :
select id
from t
group by id having min(color) = max(color)
<强> Results 强>: | ID | | ---- | | 1 | | 3 |
希望这就是你要找的......:)