2010-08-05 59 views
2

我有一個表,與ABT 22列,按以下格式6-7千行需要幫助使用SQL連接到行轉換爲列(甲骨文9I)

Seq_num  unique_id name ... 
------------------------------------ 
1   1   abc     
1   1   cde  
2   1   lmn   
2   1   opq  
3   1   pqr  
4   1   stu  
1   2   oaq  
2   2   zxq  
3   2   fgw  
3   2   pie  
4   2   tie  

我試圖轉換4對於每個連續序列UNIQUE_ID成單個行 它看起來像使用過UNIQUE_ID分區和SEQ_NUM沿左聯接來實現這一

unique_id name ...  name ...  name ...  name ... 
-------------------------------------------------------------------------- 
1   abc    lmn    pqr    stu 
2   oaq    zxq    fgw    tie 

林。

不過,我需要的格式如下表中的所有數據

unique_id name ...  name  ... name ...  name  ... 
--------------------------------------------------------------------------- 
1   abc    lmn    pqr    stu 
1   cde    opq    pqr    stu 
2   oaq    zxq    fgw    tie 
2   oaq    zxq    pie    tie 

即我需要顯示在另一行唯一SEQ_NUM(對於給定UNIQUE_ID),如果任何SEQ_NUM缺失, 使用常見的seq_num(來自同一個unique_id)來填充空白。

例如

由於UNIQUE_ID 2有兩個SEQ_NUM 3(FGW,餅圖),UNIQUE_ID 2將有看起來像

2   oaq    zxq    fgw    tie 
2   oaq    zxq    pie    tie 
兩排

是這樣的可能,如果 那麼,怎麼樣?

即時通訊使用Oracle 9i。

感謝,
R.保羅

+0

您可以使用PIVOT操作來實現該功能。 – 2010-08-05 23:27:34

+0

不幸的是Oracle 9i不支持樞軸 – 2010-08-06 00:59:14

+0

可能的重複[在Oracle中使用數據透視表的建議](http://stackoverflow.com/questions/365238/advice-using-pivot-table-in-oracle) – 2010-08-06 01:41:47

回答

0

所以,你需要填充缺失的空白。以下代碼片段無法按預期工作。思考...

以下一段代碼是WIP。這是第一次生成一組完整的SEQ_NUM,UNIQUE_ID和NAME列,但我還沒有機會測試它。

select seq_num 
     , unique_id 
     , case 
      when name is not null then name 
      else lag (name, 1) 
       over (partition by unique_id, seq_num 
         order by nvl2(name, 1, 0) 
        ) end as name 
from 
    ( 
     select t.seq_num 
       , y.unique_id 
       , y.name 
     from (select 1 as seq_num from dual 
       union all 
       select 2 as seq_num from dual 
       union all 
       select 3 as seq_num from dual 
       union all 
       select 4 as seq_num from dual) t 
     left outer join 
      your_table y 
       on (t.seq_num = y.seq_num) 
    ) 

NB - 我可以選擇使用CONNECT BY招生成的數字,但在9i中,這是一個有點片狀(並且也未記錄)。

0

不是答案,而是要求澄清。在您的例子:

1   abc    lmn    pqr    stu 
1   cde    opq    pqr    stu 

你配對的「ABC」與第一行中的「LMN」和「CDE」與第二行中的「OPQ」。是下面的一組行也是一個有效的「解決方案」:

1   abc    opq    pqr    stu 
1   cde    lmn    pqr    stu 

其中,「ABC」與「OPQ」第一行「CDE」在配對配對在第二個「LMN」?

如果是這樣,我不知道你如何知道你有一個有效的答案集,因爲在數據中似乎沒有任何東西可以幫助你區分這兩個答案。