Sql Oracle-来自多个列的唯一值组合,但返回其他列

Sql Oracle-来自多个列的唯一值组合,但返回其他列,sql,oracle,distinct,aggregate-functions,Sql,Oracle,Distinct,Aggregate Functions,我试图找出如何从表中提取不同的数据场景进行测试。假设我的表有这三个字段FIELD1、FIELD2、FIELD3。如果我想在我的数据中找到各种场景,我可以简单地这样做 select distinct FIELD1, FIELD2, FIELD3 from <table> 我希望看到其他内容字段(比如4到10)。现在,这些字段是来自记录编号30还是记录20000(假设这些记录包含这3个返回值),只要所有字段都由该记录返回就不重要了 希望这是有意义的,有人可以帮助 类似于 SELECT

我试图找出如何从表中提取不同的数据场景进行测试。假设我的表有这三个字段
FIELD1、FIELD2、FIELD3
。如果我想在我的数据中找到各种场景,我可以简单地这样做

select distinct FIELD1, FIELD2, FIELD3 from <table>
我希望看到其他内容字段(比如4到10)。现在,这些字段是来自记录编号30还是记录20000(假设这些记录包含这3个返回值),只要所有字段都由该记录返回就不重要了

希望这是有意义的,有人可以帮助

类似于

SELECT field1, 
       field2,
       field3,
       field4,
       ....
       field10
  FROM( SELECT field1,
               field2,
               ...,
               field10,
               rowid rid,
               min(rowid) OVER (partition by field1, field2, field3) min_rid
          FROM your_table_name )
 WHERE rid = min_rid
应该有用。如果有主键,您可以使用它而不是
ROWID
,我只是使用它来确保某些东西是唯一的

为了你的曲线球

SELECT field1, 
       field2,
       field3,
       field4,
       ....
       field10
  FROM( SELECT field1,
               field2,
               (CASE WHEN field3 IS NULL
                     THEN 'NULL'
                     ELSE field3
                 END) field3,
               ...,
               field10,
               rowid rid,
               min(rowid) OVER (partition by field1, 
                                             field2, 
                                             (CASE WHEN field3 IS NULL
                                                   THEN 'NULL'
                                                   ELSE field3
                                               END) min_rid
          FROM your_table_name )
 WHERE rid = min_rid
试试这个:

select a.* 
from tblA a, 
     (select min(rowid), col_1, col_2 from tblA
      group by col_1, col_2) b
where a.rowid=b.rid;      

字段4到字段10中的值是否都必须来自同一记录?或者FIELD4可以来自record#30,FIELD5可以来自record#20000,等等?@Shannon-我想我不可以,但我更喜欢它。太棒了-这需要一段时间才能搞定,但我认为这是一个好迹象。不过我还是要打弧线球。假设field3可以为null或具有某些值。当值不为null时,我希望以相同的方式处理这些值。在这种情况下,如果field3为null,则为null,否则“X”以field3结尾,只是不确定我将如何在外部选择和分区中实现它。@dscl-覆盖曲线Ball感谢Justin,我自己尝试过,几乎覆盖了它,只是有一个“()”问题。
select a.* 
from tblA a, 
     (select min(rowid), col_1, col_2 from tblA
      group by col_1, col_2) b
where a.rowid=b.rid;