我有以下代码:
select distinct(code||'_'||indicator||'_'||lenght) as combination,rownum
from my_table
(select *
from my_table)
这会返回带有行号的唯一组合。现在我想将这些行号与表“my_table”匹配,以仅针对那些与“组合”匹配的特定行号获取表中的所有列...我不知道如何。整个想法是,我有这个表(my_table),我只想选择唯一的行(基于上面的组合)。
这会返回带有行号的唯一组合。
不,事实并非如此。
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
。