2016-03-30 11 views
-1

私はCSAC値がこの一列に二列のデータを表示

ように同じである場合には、第2のポストコードは、同じ行に表示する

----------------------------------------------------------------------------- 
CUSTOMER CSAC  CIRCUIT    VALUE  TOWN  POST_CODE 
----------------------------------------------------------------------------- 
    RCE | CSAC125896 | ICUK809605 | 100 MBPS | BASILDON | SS15 5FS 
    RCE | CSAC125896 | ICUK809605 | 100 MBPS | BASILDON | SS15 6AA 

としてデータを持つテーブルを持っています

----------------------------------------------------------------------------- 
CUSTOMER CSAC CIRCUIT VALUE  TOWN  POST_CODE POST_CODE2 
----------------------------------------------------------------------------- 
RCE|CSAC125896 |ICUK809605 |100 MBPS | BASILDON | SS15 5FS | SS15 6AA 

この結果はどのように達成できますか?私は転置を使ってみましたが、望みの結果を得られませんでした。

答えて

1
SELECT CUSTOMER, 
     CSAC, 
     CIRCUIT, 
     VALUE, 
     TOWN, 
     MAX(CASE RN WHEN 1 THEN POST_CODE END) AS POST_CODE_1, 
     MAX(CASE RN WHEN 2 THEN POST_CODE END) AS POST_CODE_2 
FROM (
    SELECT t.*, 
      ROW_NUMBER() OVER (
      PARTITION BY CUSTOMER, CSAC, CIRCUIT, VALUE, TOWN 
      ORDER BY POST_CODE 
     ) AS RN 
    FROM table_name t 
) 
GROUP BY CUSTOMER, 
      CSAC, 
      CIRCUIT, 
      VALUE, 
      TOWN; 

出力

CUSTOMER CSAC  CIRCUIT VALUE TOWN  POST_CODE_1 POST_CODE_2 
-------- ---------- ---------- -------- -------- ----------- ----------- 
RCE  CSAC125896 ICUK809605 100 MBPS BASILDON SS15 5FS SS15 6AA  
1

フィールド値は同じで、POST_CODEが異なる行を2つ以上持つことができると仮定すると、クエリが返す必要がある列の数を事前に知ることはできません。わずかに異なるアプローチで

、あなたが試すことができます:

select CUSTOMER, CSAC, CIRCUIT, VALUE, TOWN, 
     listagg(POST_CODE, ', ') within group (order by post_code) 
from your_table 
group by CUSTOMER, CSAC, CIRCUIT, VALUE, TOWN 
関連する問題