Sql 用于获取所需输出的Oracle查询
感冒 数据1 rata1 T测试1 数据1 rata3 F测试2 数据1 rata2 T测试1 数据2 rata1 T测试1 数据2 rata3 T测试1 数据3 rata4 T测试1 有四列Varchar类型。我想确定的是,对于ColBrata1、rata2等的每个唯一值,找到ColA和其他两列ColC、ColD的对应值,其中ColA的特定值出现0或1次。例如-对于rata1,data1和data2只出现一次,因此输出将包括下面显示的列以及ColB其他不同值的其他列Sql 用于获取所需输出的Oracle查询,sql,group-by,oracle11g,varchar,Sql,Group By,Oracle11g,Varchar,感冒 数据1 rata1 T测试1 数据1 rata3 F测试2 数据1 rata2 T测试1 数据2 rata1 T测试1 数据2 rata3 T测试1 数据3 rata4 T测试1 有四列Varchar类型。我想确定的是,对于ColBrata1、rata2等的每个唯一值,找到ColA和其他两列ColC、ColD的对应值,其中ColA的特定值出现0或1次。例如-对于rata1,data1和data2只出现一次,因此输出将包括下面显示的列以及ColB其他不同值的其他列 data1 rata
data1 rata1 T Test1
data2 rata1 T Test1
如果有人能提供相关建议,我们将不胜感激。我认为下面的查询将满足您的要求
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
我从你们的问题中了解到的是,你们需要不同的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
ColA应该只出现0或1次。我不明白的是为什么结果集中不包括所有6行?对于rata3,只有一行带有数据1,一行带有数据2,等等。你是对的,但是正如我所提到的,上面的输出只是输出的一部分。在一个问题中,最好添加示例表和这些示例表所需的示例输出。否则,每个人都会感到困惑。+1这也是我从问题的措辞中理解的。aggregated WITH subquery返回ColB具有超过1个唯一ColA值的行。该表有250个ColB的唯一值,因此结果集应小于或等于250。使用MyQuery作为select ColB from MyTable group by ColB having countColA对查询进行了如下修改
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