0

以下の表を想定。

column name | type
id          | int
date        | varchar

私が使うとき

SELECT ROWNUMBER() OVER( ORDER BY TYPE_DATE ) as ROWID,
       TO_DATE( date, 'mm\dd\yyyy' ) as TYPE_DATE,
       * 
FROM TABLE

私は常に以下のエラーが発生します:

SQL0104N an expected token "*" was found following .... <select_sublist>

ここに3つの質問があります:

  1. なんで*ここ使えないの?
  2. この新しい列を使用できない理由OVER()
  3. 書式設定された列の順序で、2 番目の 10 レコードのセットを取得するにはどうすればよいですか
4

1 に答える 1

1

最初の質問に答えると、それは追加の列を指定したためで、DB2 はこれ*を列リストに展開できません。テーブル識別子を追加FROM TABLE Tし、公開された識別子を使用して列リストを展開することで、これを修正できます。SELECT ..., T.*

Information Centerのこのチャートでわかるように、EITHER *OR 式とexposed-name.*

>--+-*-----------------------------------------------+---------><
| .-,-------------------------------------------. |   
| V                                             | |   
'---+-expression--+-------------------------+-+-+-'   
    |             | .-AS-.                  | |       
    |             '-+----+--new-column-name-' |       
    '-exposed-name.*--------------------------'       

SELECT2 と 3 の場合、列はエイリアスによって参照することによって、同じ句内の関数の値にアクセスできません。それを下位選択に押し込んでから、OVER()関数を使用できます。次に、次を追加することで、必要な行を取得できますBETWEEN

SELECT ROWNUMBER() OVER( ORDER BY TYPE_DATE ) as ROWID, T1.*
FROM (
    SELECT TO_DATE( date, 'mm\dd\yyyy' ) as TYPE_DATE, T.* 
    FROM TABLE T
) T1
WHERE ROWNUMBER() OVER( ORDER BY TYPE_DATE ) BETWEEN 10 AND 20
ORDER BY TYPE_DATE
于 2012-07-05T22:30:35.980 に答える