如何根据所选列而不是Oracle中表的所有列获取不同的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据所选列而不是Oracle中表的所有列获取不同的行相关的知识,希望对你有一定的参考价值。

我试图得到第一个不同的3列,而最后一列可以有任何值。如果我在所有列上都有区别,那么它会给我8行。这个表是动态的,所以我需要不同的3列和最后一列中的任何值。

我有以下场景,

Name       Surname   Road           Pet
John       Trav     John_road       dog
Kaley      Couco    Couco_road     horse
Charlie    Sheen    Sheen_road     rabbit 
Johnny     Galecki  Galecki_road    cat 
John       Trav     John_road      donkie
Kaley      Couco    Couco_road      mouse
Charlie    Sheen    Sheen_road      goat
Johnny     Galecki  Galecki_road    pig

期望的结果:

Name       Surname   Road           Pet
John       Trav     John_road       dog
Kaley      Couco    Couco_road     mouse
Charlie    Sheen    Sheen_road     rabbit 
Johnny     Galecki  Galecki_road    cat 

我在此链接上尝试了解决方案,但它无法正常工作:

Oracle 11g SQL to get unique values in one column of a multi-column query

请帮助Oracle

答案

由于您不关心最后一列值,因此一个简单的选项是将其聚合为

select name, surname, road, max(pet) 
from your_table
group by name, surname, road
另一答案

使用row_number()partition by前三列:

dbfiddle demo

select * 
  from (
    select t.*, 
           row_number() over (partition by Name, Surname, Road order by pet) rn 
      from t)
  where rn = 1
另一答案

你试过这个吗?

SELECT NAME, SURNAME, rOAD, PET FROM 
(
SELECT NAME, SURNAME, rOAD, PET, ROW_NUMBER () OVER (PARTITION BY NAME, SURNAME, rOAD ORDER BY PET) RN FROM FROM TABLE_NAME
) WHERE RN=1

以上是关于如何根据所选列而不是Oracle中表的所有列获取不同的行的主要内容,如果未能解决你的问题,请参考以下文章

根据所选列中的文本调整行高

如何在jqGrid中禁用所选列的搜索选项?

Toad for Oracle - 从列选项卡中复制列而不包含所有详细信息

添加对不同于 id 的所选列的引用

如何从存储过程结果中检索特定列而不是所有列?

DT::datatable – 格式化所选列?