如何根据所选列而不是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
前三列:
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中表的所有列获取不同的行的主要内容,如果未能解决你的问题,请参考以下文章