Oracle SQL - 仅当colB对于所有colA都相同时才返回记录

时间:2015-09-15 19:31:57

标签: sql oracle

我有一个如下表格(表中当然还有其他数据):

contentView

我试图仅在所有Col B值匹配时返回Col A的值,否则返回null。

这将用作另一个将传递Col A值的sql语句的一部分,即 从表中选择*,其中Col A = 1

我需要返回Col B中的值。上表中的正确结果是Red,Black

任何想法?

4 个答案:

答案 0 :(得分:1)

怎么样?

SQL Fiddle

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)

SQL Fiddle

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 |

希望这就是你要找的......:)