1

Oracleでデータを作成するのに助けが必要です。例を挙げましょう-

Name列のTableCustomerがあります。

Customer
  Name
  Ashish
  Amit
  Sunny
  Bob.

奇数の名前が偶数の名前に隣接する形式で出力を取得したい。出力は

Customer
Name1     Name2
Ashish    Amit
Sunny     Bob 

等々...

次のクエリを試しましたが、必要な出力が得られません。

select  name, 
  case Mod(rownum,2) 
    when 1  then  name
  end  col1,   
  case Mod(rownum,2) 
    when 0  then  name 
  end  col2
from Customer
4

2 に答える 2

2

これは基本的PIVOTにデータの1つですが、Oracle10gにはピボット関数がないため、集計とCASEステートメントを使用してデータを複製する必要があります。row_number() over()同様に適用する と、データを目的の結果に変換できます。

select 
  max(case when col = 1 then name end) Name1,
  max(case when col = 0 then name end) Name2
from
(
  select name,  mod(rownum, 2) col,
    row_number() over(partition by mod(rownum, 2) order by name) rn
  from customer
) 
group by rn

SQL FiddlewithDemoを参照してください

結果:

|  NAME1 | NAME2 |
------------------
| Ashish |  Amit |
|  Sunny |   Bob |
于 2012-12-12T10:06:53.080 に答える
0

行を2でグループ化する必要があります。これを試すことができます。

SELECT MAX(decode(rn/2, floor(rn/2), NAME)) name1, 
       MAX(decode(rn/2, floor(rn/2), '', NAME)) name2
  FROM (SELECT c.*, rownum-1 rn 
          FROM Customer)
GROUP BY floor(rn/2)

行はサブクエリで任意に順序付けられます。アナリティクス(row_number() OVER (ORDER BY ...))を使用して、意味のある順序を取得できます。

于 2012-12-12T10:03:19.910 に答える