2014-02-05 19 views
0

給定一個表A具有以下數據:不一致移調

+----------+-------+ 
| Supplier | buyer | 
+----------+-------+ 
| A  |  1 | 
| A  |  2 | 
| B  |  3 | 
| B  |  4 | 
| B  |  5 | 
+----------+-------+

我的問題是,我可以移調第二列,因此所得到的表將是這樣的:

+----------+--------+--------+--------+ 
| Supplier | buyer1 | buyer2 | buyer3 | 
+----------+--------+--------+--------+ 
| A  |  1 |  2 |  | 
| B  |  3 |  4 |  5 | 
+----------+--------+--------+--------+

假設最大數目的買家被稱爲三。

回答

4

您可以使用一個公共表格表達式來給每個買家在供應商內訂單,然後只是做一個常規的情況下把它們放在列中;

WITH cte AS (
    SELECT supplier, buyer, 
    ROW_NUMBER() OVER (PARTITION BY supplier ORDER BY buyer) rn 
    FROM Table1 
) 
SELECT supplier, 
     MAX(CASE WHEN rn=1 THEN buyer END) buyer1, 
     MAX(CASE WHEN rn=2 THEN buyer END) buyer2, 
     MAX(CASE WHEN rn=3 THEN buyer END) buyer3 
FROM cte 
GROUP BY supplier; 

An SQLfiddle to test with

2

您可以考慮使用PIVOT子句:

select * 
from (
    select supplier, buyer, row_number() over (partition by supplier order by buyer) as seq 
    from a 
) 
pivot (max(buyer) for seq in (1 as buyer1, 2 as buyer2, 3 as buyer3)); 

SQLFiddle here

+0

謝謝你教我一件新事物。 – Hamidreza

+0

謝謝,但我應該提到我使用的是Oracle 10g。樞軸從11g開始可用。 – Hawk