我不能在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。
那么,有什么建议吗?
非常感谢。
答案 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