2

次のクエリを10gのOracleデータベースに対して実行する場合:

    SELECT * FROM (
        SELECT T1.ID, T2.ACCT_NO, ROW_NUMBER() OVER (PARTITION BY T1.ID ORDER BY T1.ID DESC) AS RRRRRRR 
        FROM TABLE1 T1
        INNER JOIN TABLE T2 ON T1.ID = T2.ID
        WHERE T1.ID = 666
    )
    PIVOT (MIN(T1.ID) AS ALIAS1 FOR RRRRRRR IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10));

「コマンドが正しく終了していません」というエラーが表示されます。Oracleのピボットの例を検索しましたが、ほとんど同じ例が示されていました。ここで何が欠けていますか?

4

2 に答える 2

3

@APCが指摘したPIVOTように、Oracle 10gには関数がないため、次のような集計関数とを使用できますCASE

SELECT id, acct_no, 
  min(case when RRRRRRR = 1 then id end) as '1',
  min(case when RRRRRRR = 2 then id end) as '2',
  min(case when RRRRRRR = 3 then id end) as '3',
  min(case when RRRRRRR = 4 then id end) as '4',
  min(case when RRRRRRR = 5 then id end) as '5',
  min(case when RRRRRRR = 6 then id end) as '6',
  min(case when RRRRRRR = 7 then id end) as '7',
  min(case when RRRRRRR = 8 then id end) as '8',
  min(case when RRRRRRR = 9 then id end) as '9',
  min(case when RRRRRRR = 10 then id end) as '10'
FROM 
(
  SELECT T1.ID, T2.ACCT_NO, ROW_NUMBER() OVER (PARTITION BY T1.ID ORDER BY T1.ID DESC) AS RRRRRRR 
  FROM TABLE1 T1
  INNER JOIN TABLE T2 ON T1.ID = T2.ID
  WHERE T1.ID = 666
) x
GROUP BY id, acct_no
于 2012-10-04T12:57:51.507 に答える
2

あなたの構文は申し分のないものです。残念ながら、PIVOTはOracle 11gで導入され、10gを使用しています。

于 2012-10-04T12:42:39.403 に答える