날짜두개조건으로 select하는 법. 0 6 1,053

by 에브리데이나잇쇼 [SQL Query] [2015.03.23 16:06:08]


안녕하세요

select  store_cd,  -- 매장 코드

          sum(dd_qty),  --일자별 합계

          sum(mm_qty)  --월별 합계

  from A

where 일자 between '20150322' and '20150322'

 group by store_cd

 

다음과 같은 쿼리가 있는데요

dd_qty컬럼은 where절 그대로 22일자의 합계만 출력하고 싶고

mm_qty컬럼은 1일부터 22일까지로 1일부터 오늘일자까지 합계를 출력하게 하고 싶습니다.

즉  두 컬럼을 나눠서 두조건으로 출력하고 싶다는 겁니다.

여기서 '20150322'는 파라미터로 주어지는 변수 입니다.(오늘일자를가져옴)

고수님들 도움좀 부탁드리겠습니다.

by 마농 [2015.03.23 16:13:47]
SELECT '20150322' dt
     , SUM(DECODE(dt, '20150322', qty)) dd_qty
     , SUM(qty) mm_qty
  FROM t
 WHERE dt BETWEEN '20150301' AND '20150322'
;

 


by 마농 [2015.03.23 16:37:44]

원하시는 결과표도 안보여 주셨네요.

예시 자료를 주세요

1. 원본

2. 입력조건

3. 결과

4. 설명


by jkson [2015.03.23 16:45:31]

SELECT :in_dt dt
     , SUM(DECODE(dt, to_date(:in_dt,'yyyy-mm-dd'), qty)) dd_qty
     , SUM(qty) mm_qty
  FROM t
 WHERE dt BETWEEN trunc(to_date(:in_dt,'yyyy-mm-dd'),'MM') AND to_date(:in_dt,'yyyy-mm-dd')

이거 말씀하시는 것 같은데용...;


by 에브리데이나잇쇼 [2015.03.23 17:08:09]

글수정햇어요다시확인부탁드릴게요


by 창조의날개 [2015.03.23 16:29:32]

SELECT STORE_CD
     , SUM( CASE WHEN 일자 BETWEEN TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD')
                 AND TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD')||'235959','YYYYMMDDHH24MISS') THEN DD_QTY ELSE 0 END) AS DD_QTY
     , SUM(MM_QTY) AS MM_QTY
  FROM A
WHERE 일자 BETWEEN TO_DATE(TO_CHAR(SYSDATE,'YYYYMM')||01,'YYYYMMDD') AND SYSDATE
GROUP BY STORE_CD
;

 

일자가 DATE 타입인 경우는 위와 같이 하면 될듯 합니다.

 

 

 


by 마농 [2015.03.23 18:06:28]
-- 먼저 답변과 거의 같네요. store_cd 추가 된것 빼곤...
SELECT store_cd
     , SUM(DECODE(dt, :v_dt, qty)) dd_qty
     , SUM(qty) mm_qty
  FROM t
 WHERE dt BETWEEN SUBSTR(:v_dt, 1, 6)||'01' AND :v_dt
 GROUP BY store_cd
 ORDER BY store_cd
;

 

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