2012-09-26 3 views
1

이 쿼리는 DWH 용도로 쓰여지고 있습니다.oracle analytics이 행을 반환하는 방법

SELECT 
    YEAR 
    ,MONTH 
    ,WEEK 
    ,C.CPG_PK   CPG 
    ,C.DEP_PK   DEPT 
    ,T.CUST_ID  CUST_ID 
    ,D1.R_ID   R_ID 
    ,Decode(d2.AT_CODE,'3',FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE)) AS P1 
    ,decode(d2.AT_CODE,'2',FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE)) AS IC 
    ,decode(d2.AT_CODE,'1',FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE)) AS B1 
    ,decode(FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE), 2 , d2.AT_CODE) AS P2 
    ,decode(FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE), 5 , d2.AT_CODE) AS B2 
    ,COUNT(DISTINCT A.CUST_ID)   TOTAL_ACC 
    ,COUNT(DISTINCT T.TXN_PK)   TOTAL_TXN 
    ,SUM(AM_AMOUNT)     TOTAL_AMT 
FROM T_HEADER T 
    ,CUST_MASTER A 
    ,TX_DETAILS1 D1 
    ,TX_DETAILS2 D2 
    ,CPG_MASTER C 
WHERE A.TYPE = 0  
AND  T.CUST_ID = A.CUST_ID 
AND  T.TXN_PK= 5001 
AND  T.TXN_PK= D1.TXN_PK 
AND  T.TXN_PK= D2.TXN_PK 
AND  D1.CPG_PK = C.CPG_PK 
AND  D1.OP = 1 
GROUP BY 
YEAR 
,MONTH 
,WEEK 
,C.CPG_PK 
,C.DEP_PK 
,t.CUST_ID 
,D1.R_ID 
,Decode(d2.AT_CODE,'3',FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE)) 
,decode(d2.AT_CODE,'2',FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE)) 
,decode(d2.AT_CODE,'1',FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE)) 
,decode(FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE), 2 , d2.AT_CODE) 
,decode(FUNC1.GET_ATT(d2.AT_CODE,D2.VAL_CODE), 5 , d2.AT_CODE) 

여기서 생성 된 출력 값 i가 가능기로 시도 반복된다

YEAR MONTH WEEK CPG DEPT CUST_ID R_ID P1 IC B1 P2 B2 TOTAL_ACC TOTAL_TXN TOTAL_AMT 
2012 08 32 127 -1 10019 3665     134 1 1 
2012 08 32 127 -1 10019 3665     135 1 1 
2012 08 32 127 -1 10019 3665   723   1 1 
2012 08 32 127 -1 10019 3665  714    1 1 
2012 08 32 127 -1 10019 3665 21     1 1 
2012 08 32 128 -1 10019 3665     134 1 1 
2012 08 32 128 -1 10019 3665     135 1 1 
2012 08 32 128 -1 10019 3665   723   1 1 
2012 08 32 128 -1 10019 3665  714    1 1 
2012 08 32 128 -1 10019 3665 21     1 1 

다음과 같다.

필요한 OUPUT은 고유 한 행되어야한다 (b2)으로 중요한 것은, 년, 월, 주, 소비재, 부서, CUST_ID, r_id, P1, IC, B1, P2입니다

YEAR MONTH WEEK CPG DEPT CUST_ID R_ID P1 IC B1 P2 B2 TOTAL_ACC TOTAL_TXN TOTAL_AMT 
2012 08 32 127 -1 10019 3665 21 714 723  134 1 1 
2012 08 32 127 -1 10019 3665 21 714 723  135 1 1 
2012 08 32 128 -1 10019 3665 21 714 723  134 1 1 
2012 08 32 128 -1 10019 3665 21 714 723  135 1 1 

입니다. 분석 함수를 사용하여 성취 할 수 있습니까? 아니면 쓸 필요가 있습니까? pl/sql

+0

은 내 질문에 의미가 있습니까? – YesYeeYen

답변

0

이걸 보니 답을 얻은 것 같습니다.

Year Col_1 Col_2 Col_3 
2012 A 
2012   B 
2012     C 

그리고로 변환 : 그래서 당신이하고자하는 것은 SQL의 모습을 테이블을하는 것입니다

Year Col_1 Col_2 Col_3 
2012 A  B  C 

은 (위의 예) 수행 할 수있는 다음과 같습니다

Select 
    Year, 
    Max(Col_1) as C1, 
    Max(Col_2) as C2, 
    Max(Col_3) as C3 
From 
    Table_1 
Group By 
    Year 

각 레코드가 하나 인 경우 문제가 해결됩니다. 그렇지 않으면 MAX, MIN, SUM 또는 다른 집계 함수를 사용해야하는지 알아야 할 수도 있습니다.

모든 데이터가 하나 개의 컬럼에 있었고, 당신이 하나 개의 컬럼에서 그것을 원하는 경우에, 당신은 유사한 기술을 사용할 수 있습니다

된 table_1

Year Col_1 
2012 A 
2012 B 
2012 C 

코드

Select 
    Year, 
    Max(Case When Col_1 = 'A' Then 'A' End) as A_Col, 
    Max(Case When Col_1 = 'B' Then 'B' End) as B_Col, 
    Max(Case When Col_1 = 'C' Then 'C' End) as C_Col 
From 
    Table_1 
Group By 
    Year 

Decodes을 그 Case 문장 대신 작동해야하지만, Case은 읽기가 쉽습니다.

관련 문제