在RDLC和Visual Studio 2012的查询生成器中使用ROWNUM伪列

时间:2019-07-19 16:27:57

标签: oracle rdlc rownum

我不能在Visual Studio 2012的rdlc报表的查询生成器中使用伪列,因为它在每个字段都加了引号。...

Oracle DB使用诸如字段之类的伪列,例如:ROWNUM以获取行数,因此,我需要限制查询中的行,然后在Oracle中我可以使用ROWNUM <= 10,但是查询构建器对每个行都使用引号用于查询和Oracle的字段理解字段是否带有引号表示一列而不是伪列,所以我得到一个错误:ora 00904无效标识符,因为“ ROWNUM”显示为列而不是伪列。

此查询没有过滤器...

SELECT ROWNUM, FieldA, FieldB, FieldC
FROM ANY_TABLE

这总共需要10行

SELECT ROWNUM, FieldA, FieldB, FieldC
FROM ANY_TABLE
WHERE ROWNUM<=10

但是...查询构建器将引号括起来。.

SELECT "ROWNUM", "FieldA", "FieldB", "FieldC"
FROM ANY_TABLE
WHERE "ROWNUM"<=10

Oracle不知道ROWNUM字段...因为它是PSEUDO COLUMN。

那么,有什么建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Oracle 12,则它支持“ Top n ”热门查询:

SELECT FieldA, FieldB, FieldC
FROM ANY_TABLE
FETCH FIRST 10 ROWS ONLY

如果要使用Oracle 10或11,则可以使用分析型ROW_NUMBER函数来避免使用ROWNUM,但是必须对结果进行排序。没有解决的办法。您可以使用内部查询来做到这一点...

SELECT *
FROM (
  SELECT
    FieldA,
    FieldB,
    FieldC,
    ROW_NUMBER() OVER (ORDER BY FieldA, FieldB, FieldC) AS rn
  FROM ANY_TABLE
)
WHERE rn <= 10

...或具有公用表表达式(CTE):

WITH abc AS (
  SELECT
    FieldA,
    FieldB,
    FieldC,
    ROW_NUMBER() OVER (ORDER BY FieldA, FieldB, FieldC) AS rn
  FROM ANY_TABLE
)
SELECT *
FROM abc
WHERE rn <= 10
相关问题