抑制后续行的重复值

时间:2014-10-17 12:35:16

标签: sql oracle select

item_no parent   item_no_child   item_name   text
123                3              xxx       the item is resistant to water
123                5              yyy       The item is resistant to heat
123                6              zzz       The item is ....

我将把父item_no作为输入并检索子项目no。现在我必须检查每个子项的文本,如果它们有相同的文本,我不应该显示item_name否则我应该。

1 个答案:

答案 0 :(得分:1)

row_number()分析函数是实现此类不同查询的一种巧妙方式:

SELECT item_name
FROM   (SELECT item_name,
               ROW_NUMBER() OVER (PARTITION BY text ORDER BY 1) AS rn
        FROM   items
        WHERE  item_no parent = 123)
WHERE  rn = 1

编辑:
根据评论中的要求进行一些解释 - row_number是一个分析函数(有时也称为窗口函数)。它返回每行输入一个结果(如行函数),但也考虑所有其他行(如聚合函数)。在这种情况下,row_number只返回当前行的数量(即简单计数器)。此计数是根据textpartition by子句)的不同值完成的。 row_number需要一个order by子句,因此它知道计算这些行的顺序。由于此处我们不关心哪一行(text的每个不同值)首先出现,我只是按常量1排序。