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結果セットの疑似列です。これはどのテーブルにも関連付けられておらず、最後に割り当てられるものの 1 つです (すべての並べ替えの後に発生するなど)。

row_number()関数があなたがしていることにより役立つ可能性がありますが、特定の行ごとにすべてのクエリ呼び出しで数値を同じに保ちたい場合は、数値をデータベースに保存する必要があります(または を使用rowidしますが、それはシリアル番号に似ており、エンド ユーザーに表示するのはかなり見苦しいです)。あなたが何をしようとしているのか、あなたの例からははっきりしていませんrownum

于 2010-07-02T12:42:05.957 に答える
1

上記のコメントの行と SQL の間を読んで、Oracle の分析関数を読むことをお勧めします。

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

これらは、グループ関数を実行するネストされたサブクエリを通常必要とする計算に優れています。つまり、「各行の実行中の X のバランスを教えてください」、「データの合計セットからの X のランクを教えてください」、または単に「データの総数を教えてください。

最初に理解しにくいのは、データセットのパーティションに対して同様のクエリを実行できるため、構文が複雑であることです。

あなたの場合、おそらく COUNT(*) OVER () 操作を使用して、他のテーブルから「高さ」を取得できます。

于 2010-07-03T08:22:23.063 に答える
1

TBL エイリアスは、サブ クエリではなくメイン クエリで使用されます。すなわち

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

は有効なクエリではありません。

于 2010-07-02T12:27:31.527 に答える
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 に答える