1

PROFILEという名前のテーブルがあり、その1 つの列が以下のような名前であるとします。

|NAMES|
-------
JAMES
-------
ANDY
-------
PETER
-------
SARAH
-------
JESSICA
-------
RACHEL

次のように表示されるようにビューを作成するにはどうすればよいですか。

|col1  | col2| col3   |
-------|-----|--------|
|JAMES  |PETER|JESSICA|
-------|-----|------- |
|ANDY   |SARAH|RACHEL |
----------------------       

これが必要な理由は、apex レポート ページで使用する必要があるためです。グリッド スタイルのレイアウトを計画しています。説明が難しいですが、それが実現したい構造です。それは可能でしょうか?クエリの行数が多すぎますか?

4

2 に答える 2

3

常に 3 つの列が必要であると仮定すると、これは with を使用MAXしてピボットを実行し、 andCASEとともに動作します。ROW_NUMBER()MOD()

SELECT MAX(CASE WHEN rn = 1 THEN name END) col1,
  MAX(CASE WHEN rn = 2 THEN name END) col2,
  MAX(CASE WHEN rn = 3 THEN name END) col3
FROM (
  SELECT Row_Number() Over (Partition By MOD(ROWNUM,2) Order By Null) rn, MOD(ROWNUM,2) whichGroup, name
  FROM profile
  ) talias
GROUP BY whichGroup

MODどの行を取得Row_Numberし、ピボットに使用するために使用します。

SQL フィドル: http://sqlfiddle.com/#!4/46149/1

-- 句にフィールドを追加しORDER BYないと、結果の特定の順序を保証できないことに注意してください。

于 2013-07-13T17:34:11.390 に答える