2

我想知道为什么这不起作用:

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给出了一个错误
,为什么?

迎接奥罗

4

4 回答 4

2

rownum是结果集中的伪列。它不与任何表相关联,并且是最后分配的事物之一(它发生在所有排序之后,等等)。

row_number()函数可能对您正在做的事情更有用,但是,如果您希望数字在每个给定行的所有查询调用中保持相同,那么您将不得不将数字存储在数据库中(或使用rowid,但是,这更像是一个序列号,并且很难向最终用户展示)。从您的示例中并不清楚您期望rownum做什么。

于 2010-07-02T12:42:05.957 回答
1

TBL 别名不在子查询中使用,而是在主查询中使用。IE

SELECT COALESCE(MAX(a.LaufNr),0) + TBL.Rownum
FROM schemaB.PersonRelatedTbl A
WHERE A.Persid = Tbl.Persid

不是有效的查询。

于 2010-07-02T12:27:31.527 回答
1

在上面评论中的行之间阅读,以及您的 SQL,我建议阅读 Oracle 的分析函数。

http://www.orafaq.com/node/55

这些非常适合计算通常需要执行组功能的嵌套子查询的事物 - 即“给我每行 X 的运行余额”、“给我 X 在总数据集中的排名”或简单地“给我数据的总数'。

一开始让它们难以掌握的是语法很复杂,因为它们可以对数据集的分区进行类似的查询。

在您的情况下,您可能可以使用 COUNT(*) OVER () 操作从其他表中获取“高度”。

于 2010-07-03T08:22:23.063 回答
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 ...
于 2010-07-02T12:31:30.350 回答