2017-09-16 89 views
0

我需要從返回一行的不同行中選擇數據。 我的表是這樣的:如何在Oracle中獲取不同行的值爲單行

SNO USEFUL COUNTER PINCODE SUBSNO DATA       REFERENCE 
--- ------ ------- ------- ------ ----------------------------- --------- 
1 Y  null 504293 null  504293        Sl.No 
2 null null 504293 null  1         null 
3 null null 504293 null  iciseva00031      null 
4 null null 504293 null  SANTHOSH KUMAR      null 
5 null null 504293 null  SANTHOSH MANTHENA     null 
6 null null 504293 null  12-52 BRAHMAN WADA    null 
7 null null 504293 null  ASIFABAD       null 
8 null null 504293 null  Andhra Pradesh      null 
9 null null 504293 null  9248859222       null 
10 null null 504293 null  2         null 
11 null null 504293 null  WSGLDPL12415      null 
12 null null 504293 null  SIDDHARTHA COMMUNICATIONS   null 
13 null null 504293 null  MASADE SATISH      null 
14 null null 504293 null  HNO10-143POSTOFFICEROADBAPUNAGAR null 
            ASIFABADDISTKUMRAMBHEEMASIFABAD 
15 null null 504293 null  ADILABAD       null 
16 null null 504293 null  ANDHRA PRADESH      null 
17 null null 504293 null  9059187009       null 

我不得不這樣返回的輸出:

PINCODE SUBSNO USER   COMPANY  AGENT   ADDRESS CITY   STATE  PHONE 
------- ------ ----   -------  -----   ------- ----   -----  ----- 
504293 1  iciseva00031 SANTHOSHKUMAR SANTHOSHMANTHENA 12-52 BRAHMAN WADA ASIFABAD Andhra Pradesh 9248859222 

請幫助我。

+0

源表中缺少數據,例如手機。 – mjpolak

回答

0

「我必須表明產出表是這樣的:」

這是很容易搶一行(有正則表達式的支持,以幫助纏鬥重複使用廣告編輯):

select t1.data as PINCODE 
     , t2.data as SUBSNO 
     , t3.data as USER 
     , t4.data as COMPANY 
     , t5.data as AGENT 
     , t6.data as ADDRESS 
     , t7.data as CITY 
     , t8.data as STATE 
     , t9.data as PHONE 
from (select PINCODE, DATA from your_table where PINCODE = DATA) t1        
    left join (select PINCODE, DATA from your_table where SNO = 2) t2 
     on t2.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 3) t3 
     on t3.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 4) t4 
     on t4.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 5) t5 
     on t5.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 6) t6 
     on t6.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 7) t7 
     on t7.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 8) t8 
     on t8.pincode = t1.pincode        
    left join (select PINCODE, DATA from your_table where SNO = 9) t9 
     on t9.pincode = t1.pincode   
where t1.pincode = '504293' 
/

當然,這可能不是你所需要的。毫無疑問,你希望擁有所有額外的行 - sno >= 10。簡單:只要不斷重複上述過程就可以獲得所需數量的列。

備註

  1. 您是否必須對投影中的列名進行硬編碼?是的。所呈現的值表沒有屬性類型指示符,因此無法知道該列表示什麼。所以你需要自己將缺少的智能注入查詢。
  2. 如果結果表中確實有一個屬性類型列,您可以使用它來標記投影中的列嗎?是的,但它意味着動態生成查詢。
  3. 如果另一個PINCODE以不同的順序包含列,會發生什麼情況?你會怎麼說?如果沒有屬性類型指示符,您不知道任何列應該是什麼,所有您必須繼續是由您的示例輸出表示的推測優先級。
  4. 所有這些加入:不會表現吸?是的,是的,它可能會。

不幸的是你沒有簡單的。優雅的,表現性的解決方案,因爲源數據是一場車禍。

這些通用數據存儲表對於開發人員編寫數據輸入例程具有誘惑力。他們可以以一種非常簡單的方式存儲數據,而不必擔心數據建模和所有這些繁瑣的工作。另外它是超級靈活的和麪向未來的。但是他們實際上做了什麼,卻蒙受了大量的技術債務,必須由需要獲取數據的開發者來償還。

相關問題