2012-10-30 39 views
1
SELECT PE.PHYS_RESR_ID,PE.EQMT_INIT, PE.EQMT_NBR, 
decode (EEU.dimn_type , 'EXTHGT', EEU.dimn_valu) as EXTHGT, 
decode(EEU.dimn_type, 'EXTHGT', EEU.uom_code) as UNIT_EXTHGT, 
decode (EEU.dimn_type , 'INHGT', EEU.dimn_valu) as INHGT, 
decode(EEU.dimn_type, 'INHGT', EEU.uom_code) as UNIT_INHGT, 
decode (EEU.dimn_type , 'INWDTH', EEU.dimn_valu) as INWDTH, 
decode(EEU.dimn_type, 'INWDTH', EEU.uom_code) as UNIT_INWDTH 

FROM EQU_EQMT PE 
    left join EQU_EQMT_DIMN EEU 
    on EEU.PHYS_RESR_ID = PE.PHYS_RESR_ID  
and (EEU.POS_DESC is null or EEU.POS_DESC ='VALU' or EEU.POS_DESC ='valu'); 

但是當我運行它。該查詢返回給我一個行我爲每個解碼。我想要一行這個ID pe.phys_resr_id與不同的數據在同一行。有什麼建議? 我想它給我這個樣子:在查詢中使用解碼多個結果?

+-------------+-------------+---------+--------+------------+---------+------------+------------+---------------+ 
| PHYS_RESR_ID| EQMT_INIT | EQMT_NBR| EXTWD | UNIT_EXTWD | INHGT | UNIT_INGHT | INWDTH  | UNIT_INWDTH | 
+-------------+-------------+---------+--------+------------+---------+------------+-------------+--------------+ 
| 456  | AC   | 3  | 4 | IN  | NULL | NULL  | NULL  | NULL  | 
| 324  | AD   | 45  | 67 | IN  | 56  | IN   | NULL  | NULL  | 
| 132  | B   | 65  | 54 | IN  | 78  | IN   | 34   | IN  |  
+----+-------------+---------+--------+--------+------------+---------+------------+-------------+--------------+ 
+0

Pleae提供樣本數據和所需的輸出。 – RedFilter

+0

我把所需的輸出與一些數據。我想只是一個例子。 –

回答

1

我會用MAX(DECODE(...))成語pivot

SQL> SET NULL [NULL] 
SQL> SELECT pe.phys_resr_id 
    2 ,  pe.eqmt_init 
    3 ,  pe.eqmt_nbr 
    4 ,  MAX(DECODE(eeu.dimn_type, 'EXTHGT', eeu.dimn_valu)) AS exthgt 
    5 ,  MAX(DECODE(eeu.dimn_type, 'EXTHGT', eeu.uom_code)) AS unit_exthgt 
    6 ,  MAX(DECODE(eeu.dimn_type, 'INHGT' , eeu.dimn_valu)) AS inhgt 
    7 ,  MAX(DECODE(eeu.dimn_type, 'INHGT' , eeu.uom_code)) AS unit_inhgt 
    8 ,  MAX(DECODE(eeu.dimn_type, 'INWDTH', eeu.dimn_valu)) AS inwdth 
    9 ,  MAX(DECODE(eeu.dimn_type, 'INWDTH', eeu.uom_code)) AS unit_inwdth 
10 FROM  equ_eqmt pe 
11   LEFT JOIN equ_eqmt_dimn eeu ON eeu.phys_resr_id = pe.phys_resr_id 
12 AND  (eeu.pos_desc IS NULL OR eeu.pos_desc = 'VALU' OR eeu.pos_desc ='valu') 
13 GROUP BY pe.phys_resr_id 
14 ,  pe.eqmt_init 
15 ,  pe.eqmt_nbr 
16 ; 

PHYS_RESR_ID EQMT_INIT EQMT_NBR  EXTHGT UNIT_EXTHG  INHGT UNIT_INHGT  INWDTH UNIT_INWDT 
------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 
     456 AC     3   4 IN   [NULL]  [NULL]  [NULL]  [NULL] 
     324 AD     45   67 IN     56 IN   [NULL]  [NULL] 
     132 B     65   54 IN     78 IN     34 IN 

SQL> 
相關問題