안녕하세요.
짜다가 막혀서 질문드립니다.
---------------------------------------------------------------------------------------
select B.ID as Id
, ( select max(case when rk = 1 then failcon || ':' || '' || ' ' || cnt || '건 |' end)
|| max(case when rk = 1 then failcon || ':' || '' || ' ' || cnt || '건 |' end)
|| max(case when rk = 1 then failcon || ':' || '' || ' ' || cnt || '건 |' end)
from(
select rank() over( order by( count(*) desc ) as rk
, failcon
, count(*) as cnt
from A A
, B B
where A.ID = B.ID <-- 개인적으로 생각되는 중복 카운트 지점
and b.statcd = '07'
group by failcon )
) AS failrsncon
from B B
, C C
where B.powcd = C.powcd
---------------------------------------------------------------------------------------
위의 쿼리를 수행 했을 때의 결과 ( 한개의 ID에 해당하는 count가 다른 실패건수의 전체집계되어 나오는 현상)
ID failrsncon
1BA 사용자오류:200|Connect오류:400|코드오류:500
2BA 사용자오류:200|Connect오류:400|코드오류:500
3BA 사용자오류:200|Connect오류:400|코드오류:500
---------------------------------------------------------------------------------------
원하는 결과
ID failrsncon
1BA 사용자오류:200 | Connect오류:400 | 코드오류:500
2BA 정상경로가아닙니다:100 | 계정을확인하세요:300 | 인증이안됐습니다.:700
3BA 보안체크가안됨:120 | 요청오류:250 | ID가없습니다.:160
---------------------------------------------------------------------------------------
어떻게 해야할까요..?
select B.ID as Id
, ( select max(case when rk = 1 then failcon || ':' || '' || ' ' || cnt || '건 |' end)
|| max(case when rk = 1 then failcon || ':' || '' || ' ' || cnt || '건 |' end)
|| max(case when rk = 1 then failcon || ':' || '' || ' ' || cnt || '건 |' end)
from(
select rank() over( order by( count(*) desc ) as rk
, failcon
, count(*) as cnt
from A A
, B B
where A.ID = B.ID <-- 개인적으로 생각되는 중복 카운트 지점
and b.statcd = '07'
group by failcon )
) AS failrsncon // 항상 같은 값만 나오게 되어있네요. 아래에 있는 B테이블과 연관성이 전혀 없어요.
무조건 max값만 나오게 되어있어요..
from B B
, C C
where B.powcd = C.powcd
바깥쪽 B테이블의 id 값에 따라 failcon의 값이 정해지는 거라면 바깥쪽 B테이블과 서브쿼리와의
상관관계를 작성해주셔야해요.