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。