我想知道为什么这不起作用:
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
答案 0 :(得分:2)
rownum
是结果集中的伪列。它与任何表都没有关联,并且是最后被分配的东西(它在所有排序之后发生等)。
row_number()
函数可能对您正在执行的操作更有用,但是,如果您希望数字在每个给定行的所有查询调用中保持相同,那么您将会必须将数字存储在数据库中(或使用rowid
,但是,这更像是序列号,并且向最终用户显示非常难看)。从你的例子中可以清楚地看出你期望rownum
做什么。
答案 1 :(得分:1)
TBL别名不在子查询中使用,而是在主查询中使用。即
SELECT COALESCE(MAX(a.LaufNr),0) + TBL.Rownum
FROM schemaB.PersonRelatedTbl A
WHERE A.Persid = Tbl.Persid
不是有效查询。
答案 2 :(得分:1)
在上面评论中的行和SQL之间进行阅读,我建议阅读Oracle的分析函数。
这些非常适合计算通常需要执行组函数的嵌套子查询的东西 - 即'给我每行的X的运行平衡','从总数据集中给出X的等级'或者只是“给我总数据数”。
一开始很难理解的是语法很复杂,因为它们可以对数据集的分区进行类似的查询。
在您的情况下,您可以使用COUNT(*)OVER()操作从其他表中获取“高度”。
答案 3 :(得分:0)
行数是每个输出行 - 不是每个表
为什么不试试
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 ...