2017-10-27 18 views
0

私はデータがこのようなものだったOBIEEでレポートを作成したいと思います:私はOBIEEでこれを実現するにはどうすればよい複数の結果をOBIEE 11gの1つの行に連結する方法は?

CUST_INTRL_ID DOC_TYPE_CD DOC_NM EMAIL_ADDR_TX    PHON_NB 
1    1,2   A,B  [email protected],[email protected] 123456,765442,845322          
2    1,2   A,B  [email protected]    342315,423424,874534 

:それから私はこのようなレポートを作成したいと思います

Table : CUST 
CUST_INTRL_ID 
1 
2 
3 
4 

Table : CUST_ID_DOC 
CUST_INTRL_ID  DOC_TYPE_CD  DOC_NM 
1      1    A 
1      2    B 
2      1    A 
2      2    B 

Table : CUST_EMAIL 
CUST_INTRL_ID  EMAIL_ADDR_TX 
1     [email protected] 
1     [email protected] 
2     [email protected] 

Table : CUST_PHON 
CUST_INTRL_ID  PHON_NB 
1     123456 
1     765442 
1     845322 
2     342315 
2     423424 
2     874534 

を? SQLクエリでは、

SELECT X.CUST_INTRL_ID 
    , LTRIM(RTRIM(LISTAGG(CASE WHEN R1=1 THEN X.EMAIL_ADDR_TX ELSE '' END, ', ') WITHIN GROUP (ORDER BY X.EMAIL_ADDR_TX))) AGG_EMAIL 
    , LTRIM(RTRIM(LISTAGG(CASE WHEN R2=1 THEN X.PHON_NB ELSE '' END, ', ') WITHIN GROUP (ORDER BY X.PHON_NB))) AGG_PHON 
    , LTRIM(RTRIM(LISTAGG(CASE WHEN R3=1 THEN X.DOC_TYPE_CD ELSE '' END, ', ') WITHIN GROUP (ORDER BY X.DOC_TYPE_CD))) AGG_DOC_TYPE 
    , LTRIM(RTRIM(LISTAGG(CASE WHEN R3=1 THEN X.DOC_NM ELSE '' END, ', ') WITHIN GROUP (ORDER BY X.DOC_NM))) AGG_DOC_NM 
FROM (
    SELECT CUST.CUST_INTRL_ID 
    , CUST_EMAIL_ADDR.EMAIL_ADDR_TX 
    , CUST_PHON.PHON_NB 
    , CUST_ID_DOC.DOC_NM 
    , CUST_ID_DOC.DOC_TYPE_CD 
    , ROW_NUMBER() OVER (PARTITION BY CUST.CUST_INTRL_ID, CUST_EMAIL_ADDR.EMAIL_ADDR_TX ORDER BY CUST.CUST_INTRL_ID) R1 
    , ROW_NUMBER() OVER (PARTITION BY CUST.CUST_INTRL_ID, CUST_PHON.PHON_NB ORDER BY CUST.CUST_INTRL_ID) R2 
    , ROW_NUMBER() OVER (PARTITION BY CUST.CUST_INTRL_ID, CUST_ID_DOC.DOC_TYPE_CD ORDER BY CUST.CUST_INTRL_ID) R3 
    FROM BUSINESS.CUST 
    LEFT JOIN BUSINESS.CUST_EMAIL_ADDR ON CUST.CUST_INTRL_ID = CUST_EMAIL_ADDR.CUST_INTRL_ID 
    LEFT JOIN BUSINESS.CUST_PHON ON CUST.CUST_INTRL_ID = CUST_PHON.CUST_INTRL_ID 
    LEFT JOIN BUSINESS.CUST_ID_DOC ON CUST.CUST_INTRL_ID = CUST_ID_DOC.CUST_INTRL_ID 
) X 
GROUP BY X.CUST_INTRL_ID 

でこれを行うことができます。しかし、このクエリは時間がかかりすぎると、OBIEEレポートには、長い時間のためにロードされません。 OBIEE 11gリポジトリには同じことを実行する方法はありますか?

ありがとうございます。 よろしく、 Jegun。

答えて

0

これはOBI自体の中で行うことは可能ですが、これは「各問合せで論理的に」ではなく物理的に一度だけ行う必要があるためです。

概念的な観点からは間違ったアプローチです。

関連する問題