안녕하세요 티베로로 피벗 쿼리를 짜는도중 막혀서 질문드립니다. 구 별로 건수를 피벗조회하는 쿼리인데 결과가 아래처럼 나옵니다 근데 저 남구라는곳에 정확한 지역을 알려줘야하는데 현재 테이블에 전체 주소를 담고 있는 컬럼이 있는 상황이고 구 이름만 딴 컬럼도 있는상황입니다. 처음엔 case when gu_name = '남구' then substr('전체주소컬럼' , ) || gu_name 이런식으로 앞에 지역명을 붙여주려고 했는데 쿼리 결과 개수가 달라지는게 문제입니다. 또한 저 substring 값의 범위를 늘리면 쿼리 개수가 더 늘어나네요 뭐가 문제일까요? 원본 쿼리 SELECT * FROM ( SELECT replace(GU_NAME,' ', '') AS GU_NAME , CASE WHEN RMARK LIKE '야놀자%' THEN '야놀자' WHEN RMARK IS NULL THEN '기타' ELSE LOWER(RMARK) END as RMARK FROM IN203T ) PIVOT ( count(RMARK) FOR RMARK IN ( 'bc카드' , 'k뱅크') ) ORDER BY GU_NAME; 가평군 0 0 강남구 0 3 강릉시 0 4 강북구 0 0 강서구 0 3 강화군 0 0 남구 0 4
수정시도
SELECT * FROM ( SELECT CASE WHEN GU_NAME = '남구' THEN substr(INSLOC,1, 2) || replace(GU_NAME,' ', '') ELSE replace(GU_NAME,' ', '') END AS GU_NAME , CASE WHEN RMARK LIKE '야놀자%' THEN '야놀자' WHEN RMARK IS NULL THEN '기타' ELSE LOWER(RMARK) END as RMARK FROM IN203T ) PIVOT ( count(RMARK) FOR RMARK IN ( 'bc카드' , 'k뱅크') ) ORDER BY GU_NAME;
-- 시도(지역) 항목이 있다면 그걸 이용하시면 되고, 없다면 만들어 사용하시면 됩니다. SELECT * FROM (SELECT SUBSTR(insloc, 1, INSTR(insloc, ' ') - 1) si_name , REPLACE(gu_name, ' ') gu_name , CASE WHEN rmark LIKE '야놀자%' THEN '야놀자' WHEN rmark IS NULL THEN '기타' ELSE LOWER(rmark) END rmark FROM in203t ) PIVOT (COUNT(*) FOR rmark IN ('bc카드', 'k뱅크')) ORDER BY si_name, gu_name ;