Oracle查询获取所需的输出

时间:2011-07-09 03:20:24

标签: sql group-by oracle11g varchar

  

ColA ColB ColC ColD
  data1 rata1 T Test1
  data1 rata3 F Test2
  data1 rata2 T Test1
  data2 rata1 T Test1
  data2 rata3 T Test1
  data3 rata4 T Test1

有四列Varchar类型。我想确定的是ColB的每个唯一值(rata1,rata2等),找到ColA和其他两列(ColC,ColD)的相应值,其中ColA的特定值出现0或1次。例如 - 对于rata1,data1和data2出现一次,因此输出将包括下面显示的列以及其他不同ColB值的列。

data1    rata1    T     Test1
data2    rata1    T     Test1

如果有人可以提供任何建议,我们将非常感激。

3 个答案:

答案 0 :(得分:2)

我认为以下查询将实现您的目标。

With MyQuery as
(
     select ColA, ColB
       from MyTable
   group by ColA, ColB
     having count(*) <= 1
)
select ColA, ColB, ColC, ColD
  from MyTable t inner join MyQuery q on t.ColB = q.ColB and t.ColA = q.ColA


编辑以包含John C在评论中提供的修改。

With MyQuery as
(
     select ColB
       from MyTable
   group by ColB
     having count(ColA) <= 1
)
select ColA, ColB, ColC, ColD
  from MyTable t inner join MyQuery q on t.ColA = q.ColA

答案 1 :(得分:2)

我从你那里得到的问题是你想要不同的ColB值,然后想要ColA,ColC和ColD对应于那个ColB值。 如果是这种情况,您不必混淆自己,只需按ColB订购。

所以查询是

select * from TableA o left outer join
(select distinct ColA,ColB from TableA t)
 on o.ColA = t.ColA and o.ColB = t.ColB 
group by o.ColA having count(*) <= 1

答案 2 :(得分:1)

With MyQuery as (select ColB from MyTable group by ColB having count(ColA) <= 1) select
t.ColB, ColA, ColC, ColD from MyTable t inner join MyQuery q on t.ColB = q.ColB