ROWNUM子查询
我wondring为什么这不起作用:ROWNUM子查询
SELECT
(
SELECT COALESCE(MAX(a.LaufNr),0) + TBL.Rownum
FROM schemaB.PersonRelatedTbl A
WHERE A.Persid = Tbl.Persid
)
, Tbl.Some_Other_Attributs
FROM schemaA.PersonRelatedTbl TBL
WHERE ...
这+ TBL.Rownum
给出了一个错误
为什么呢?
迎接 AURO
rownum
是在结果集的虚列。它不与任何表相关联,并且是最后分配的东西之一(它发生在所有排序之后,等等)。
有可能row_number()
函数对你正在做的事情更有用,但是如果你希望数字在每个给定行的所有查询调用中保持不变,那么你将不得不存储数据库中的数字(或使用rowid
,但是,这更像是一个序列号,对最终用户来说显得很丑)。从你的例子中不太清楚你期望rownum
正在做什么。
的TBL别名没有在子查询,但在主查询使用。即
SELECT COALESCE(MAX(a.LaufNr),0) + TBL.Rownum
FROM schemaB.PersonRelatedTbl A
WHERE A.Persid = Tbl.Persid
不是一个有效的查询。
嗯,我想那不是问题:d coze我有Tbl.Persidand它工作正常 – domiSchenk 2010-07-02 14:35:36
行num是每个输出行 - 不是每个表
为什么不试试
SELECT
(
SELECT COALESCE(MAX(a.LaufNr),0)
FROM schemaB.PersonRelatedTbl A
WHERE A.Persid = Tbl.Persid
) || rownum, Some_Other_Attributs
FROM schemaA.PersonRelatedTbl TBL
WHERE ...
犯规|| neans只是在后面?像1 || 2 = 12? – domiSchenk 2010-07-02 14:34:41
是的 - 这是字符串concatenation的捷径 - 所以它会自动将任何一方的类型转换为字符串。 你也仍然有ROWNUM将有一个任意值的问题。 – JulesLt 2010-07-03 08:05:23
在上述评论的线,你的SQL之间的阅读,我会建议对Oracle的解析函数读了。
这些都是非常适合计算事情,通常需要嵌套子查询执行组的功能 - 即“给我X的每一行的运行平衡”,“给我X的等级之外的整套数据'或者简单地'给我数据的总数'。
是什么让他们很难在第一把握的是,语法是复杂的,因为他们可以为您的数据集的分区做类似的查询。
你的情况,你可能可以使用COUNT(*)OVER()操作以获取来自其他表中的“高度”。
不是我列表中的一列。 我有一张桌子,一个人可以有更多的一排像历史一样。我需要合并2个表(相同的属性等),当我使用这个脚本(它的插入/选择)我不知道实际的行号。 SOI想读取用户的实际highst,并开始在这个数字增加(例如5是HIST现在的话,我想先从6加...等) – domiSchenk 2010-07-02 14:33:43
“(它发生毕竟排序等)”这可能是为什么它的剂量起作用。谢谢! – domiSchenk 2010-07-02 14:39:19
它在排序之前被分配,这可能会导致一些人的问题。 从big_table_of_numbers WHERE ROWNUM JulesLt 2010-07-02 17:48:50