2012-12-12 70 views
1

我需要一些幫助來在Oracle中編寫數據。我會舉一個例子 -Oracle查詢將奇數的行放在偶數的旁邊

我有一個名稱列的表客戶。

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 
+3

什麼定義行是否是奇數還是偶數?行不是在關係數據庫中自然排序的 –

回答

2

這個ia基本上是數據的PIVOT,但是Oracle10g沒有pivot功能,所以你將不得不使用聚合和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 Fiddle with Demo

結果:

| NAME1 | NAME2 | 
------------------ 
| Ashish | Amit | 
| Sunny | Bob | 
+0

謝謝bluefeet。 IT符合我的期望。 – vibhu

0

你需要組2行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 ...))獲取有意義的訂單。