1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 안녕하세요 티베로로 피벗 쿼리를 짜는도중 막혀서 질문드립니다. 구 별로 건수를 피벗조회하는 쿼리인데 결과가 아래처럼 나옵니다 근데 저 남구라는곳에 정확한 지역을 알려줘야하는데 현재 테이블에 전체 주소를 담고 있는 컬럼이 있는 상황이고 구 이름만 딴 컬럼도 있는상황입니다. 처음엔 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 |
수정시도
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; |
1 2 3 4 5 6 7 8 9 10 11 12 | -- 시도(지역) 항목이 있다면 그걸 이용하시면 되고, 없다면 만들어 사용하시면 됩니다. 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 ; |