如何在 SQL Developer 中将行号与另一个表匹配

问题描述 投票:0回答:1

我有以下代码:

select distinct(code||'_'||indicator||'_'||lenght) as combination,rownum
from my_table
(select *
from my_table)

这会返回带有行号的唯一组合。现在我想将这些行号与表“my_table”匹配,以仅针对那些与“组合”匹配的特定行号获取表中的所有列...我不知道如何。整个想法是,我有这个表(my_table),我只想选择唯一的行(基于上面的组合)。

oracle-sqldeveloper
1个回答
0
投票

这会返回带有行号的唯一组合。

不,事实并非如此。

DISTINCT
不是函数,它适用于
SELECT
子句的所有列,包括
ROWNUM
,因此您最终将返回每一行,因为
code
indicator
length
的重复项将被分配不同的值
ROWNUM
值,因此结果集中不会有
DISTINCT
行。

如果您想要所有独特的组合,请首先使用

DISTINCT
,然后在嵌入式视图上应用
ROWNUM

SELECT m.*,
       ROWNUM
FROM   (
  SELECT DISTINCT
         code,
         indicator,
         length
  FROM   my_table
) m;

现在我想将这些行号与表“my_table”匹配,以仅针对那些与“组合”匹配的特定行号获取表中的所有列。

解释有点混乱,但您似乎希望为每个

code
indicator
length
组合返回一行,并返回该行的所有列。使用
ROW_NUMBER
分析函数:

SELECT *
FROM   (
  SELECT m.*,
         ROW_NUMBER() OVER (PARTITION BY code, indicator, length ORDER BY something)
           AS rn
  FROM   my_table m
)
WHERE  rn = 1;

something
可以是另一列、
ROWNUM
或文字值,例如
1

© www.soinside.com 2019 - 2024. All rights reserved.