특정 컬럼값이 조회가 안될경우 0으로 표시하게 할려면? 0 8 2,154

by 아침이네 [SQL Query] [2023.08.18 10:32:54]


select loctval, srno , substr(inpdttm,0,8) as cdate, count(*) as imagecount from ximg where ximg.inpdttm>20230101 and ximg.inpdttm<20230301 and loctval='seoul' and ximg.tpcd='v' group by substr(inpdttm, 0,8), loctval, srno

해당 쿼리에서 만약 srno값이 10,20,30,40,50이 있는데 조회한 날짜에 10이 없어서 imagecount에 0으로 표기되게 할려면 어떻게 해야하나요?

현재 쿼리로는 데이터가 없다보니 아에 빠져버리네요..

by 마농 [2023.08.18 11:07:27]

DB 종류 및 버전 알려주세요.
혹시 10,20,30,40,50 에 대한 코드테이블이 별도로 있는지요?
만약 어떤 날에는 5개 코드 다 없다면? 해당 일자는 나와야 할까요? 안나와도 될까요?


by 마농 [2023.08.18 11:33:43]

inpdttm 에 대한 조건은 숫자와 비교하는데? (inpdttm < 20230301)
조회할 때는 문저처럼 잘라서 조회하네요? SUBSTR(inpdttm, 0, 8)
맞게 사용한 건가요? 뭔가 이상한데요?
inpdttm 의 데이터 타입이 뭔가요?


by 아침이네 [2023.08.18 12:25:43]

10,20,30 코드가 별도로 있는 테이블은 따로 없습니다. db는 티베로입니다. inpdttm은 varchar 타입인데 제가 착각해서 202300301235959 이런 식으로 썼어야 했는데 제가 잘못 체크했네요.

제가 질문한거 답한다면 srno를 group by로 잡아놓은 쿼리와 제가 질문한 쿼리와 join을 해야 될 거 같은데 맞을까요?


by 마농 [2023.08.18 13:01:39]

만약 어떤 날에는 5개 코드 다 없다면? 해당 일자는 나와야 할까요? 안나와도 될까요?


by 아침이네 [2023.08.18 13:05:21]

srno컬럼이 10, 날짜컬럼 20230102 이고 imagecount 에는 0이 표시되는 방향으로 할려합니다.


by 마농 [2023.08.18 13:12:49]

제 질문이 어려웟나요?
만약 어떤 날에는 5개 코드 다 없다면? 해당 일자는 나와야 할까요? 안나와도 될까요?
그냥 원하는 결과표를 표로 그려주실 수 있나요?

예를 들어 1일부터 3일까지 기간으로 조회하는데
1일에는 5개 코드 다 있고
2일에는 4개 코드 만 있고
3일에는 아무것도 없다면?
결과가 어떻게 나와야 할까요?

(1안 : 없는 날짜는 안나와도 된다.)
seoul 1일 10 1개
seoul 1일 20 1개
seoul 1일 30 1개
seoul 1일 40 1개
seoul 1일 50 1개
seoul 2일 10 1개
seoul 2일 20 1개
seoul 2일 30 1개
seoul 2일 40 0개
seoul 2일 50 1개

(2안 : 없는 날짜도 나와야 된다.)
seoul 1일 10 1개
seoul 1일 20 1개
seoul 1일 30 1개
seoul 1일 40 1개
seoul 1일 50 1개
seoul 2일 10 1개
seoul 2일 20 1개
seoul 2일 30 1개
seoul 2일 40 0개
seoul 2일 50 1개
seoul 3일 10 0개
seoul 3일 20 0개
seoul 3일 30 0개
seoul 3일 40 0개
seoul 3일 50 0개
 


by 아침이네 [2023.08.18 13:57:01]
loctval srno cdate imagecount
seoul 10 20230102 0
seoul 10 20230103 0
seoul 10 23230104 0
seoul 20 20230102 12
seoul 20 20230103 23
seoul 20 20230104 48
seoul 30 20230102 30
seoul 30 20230103 21
seoul 30 20230104 11

위의 테이블처럼 특정 날짜에 데이터가 없어서 아에 srno 10을 조회할 수 없을 때  강제로 srno 10 에 특정컬럼 imagecount를0으로 표시해주길 원한겁니다.


by 마농 [2023.08.20 22:43:51]
WITH ximg AS
(
SELECT 'seoul' loctval, 20 srno, '20230102000000' inpdttm, 'v' tpcd FROM dual
UNION ALL SELECT 'seoul', 20, '20230103010000', 'v' FROM dual
UNION ALL SELECT 'seoul', 20, '20230103020000', 'v' FROM dual
UNION ALL SELECT 'seoul', 20, '20230104010000', 'v' FROM dual
UNION ALL SELECT 'seoul', 20, '20230104020000', 'v' FROM dual
UNION ALL SELECT 'seoul', 20, '20230104030000', 'v' FROM dual
UNION ALL SELECT 'seoul', 30, '20230102000000', 'v' FROM dual
UNION ALL SELECT 'seoul', 30, '20230103000000', 'v' FROM dual
UNION ALL SELECT 'seoul', 30, '20230104000000', 'v' FROM dual
)
SELECT a.loctval
     , a.srno
     , b.cdate
     , COUNT(c.srno) imagecount
  FROM (SELECT 'seoul' loctval
             , LEVEL * 10 srno
          FROM dual
         CONNECT BY LEVEL <= 3
        ) a
 CROSS JOIN
       (SELECT TO_CHAR(sdt + LEVEL - 1, 'yyyymmdd') cdate
          FROM (SELECT TO_DATE('20230102', 'yyyymmdd') sdt
                     , TO_DATE('20230104', 'yyyymmdd') edt
                  FROM dual
                )
         CONNECT BY LEVEL <= edt - sdt + 1
        ) b
  LEFT OUTER JOIN
       (SELECT loctval
             , srno
             , SUBSTR(inpdttm, 1, 8) cdate
          FROM ximg
         WHERE loctval  = 'seoul'
           AND tpcd     = 'v'
           AND inpdttm >= '20230102' || '000000'
           AND inpdttm <= '20230104' || '235959'
        ) c
    ON a.loctval = c.loctval
   AND a.srno    = c.srno
   AND b.cdate   = c.cdate
 GROUP BY a.loctval, a.srno, b.cdate
 ORDER BY a.loctval, a.srno, b.cdate
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입