Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用于获取所需输出的Oracle查询_Sql_Group By_Oracle11g_Varchar - Fatal编程技术网

Sql 用于获取所需输出的Oracle查询

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

感冒 数据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    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