0

我很欣赏这个问题以前曾被问过,但我很难找到一个甚至可以在 Oracle 10g (10.2.0.5.0) 中运行的答案

我有一个名为的表BASIC,其中包含大约 70 列。目前,我使用以下代码(作为示例)返回指定数量的行 - 结果是前 20 个成员MEMBNO在 5000 之后

SELECT * FROM BASIC WHERE MEMBNO>5000 AND ROWNUM <=20 ORDER BY MEMBNO;

在返回的 20 行中,有几行在列中具有相同的NINO

我想修改我的SELECT语句以返回具有不同/唯一NINO值的下 20 行

简单地将 * 包裹起来DISTINCT会给我一个ORA-00936: missing expression错误,而且它不会像我想要的那样精确。

4

2 回答 2

2

你能试试下面的代码吗:-我使用分析查询概念来只获取不同的 nino 值。

     select * from 
        (SELECT b.*,row_number() over (partition by nino order by MEMBNO  ) rn 
FROM BASIC b WHERE MEMBNO>5000)
 where rn =1 AND ROWNUM <=20 ORDER BY MEMBNO;

如果您遇到任何问题,请告诉我。

于 2013-11-06T09:09:30.723 回答
1

我想我已经通过另一个来源找到了解决方案

这显示了有重复的行...

select * from basic where rowid not in (select min(rowid) from basic group by nino)

这显示了删除重复行的行...

select * from basic where rowid in (select min(rowid) from basic group by nino)

然后我可以为最终结果添加我的行数和 membno 过滤器......

select * from basic where rowid in (select min(rowid) from basic where membno>6615 group by NINO) and rownum <=20 order by membno;
于 2013-11-06T09:37:42.623 回答