csdn에서 문제를 보고 생각해서 하나 작성했습니다. 내가 틀렸다면 정정해주세요.
화면 기능에는 테이블의 데이터에 대한 통계 테이블 정의가 필요합니다(사용하지 않는 필드 생략).
LB01_PURRECEIVEBOOK
(
구매 날짜, --형식: 2009/11/01
수신 번호
)
① 연도별 계산 시, 연도가 비어 있는 경우 해당 연도의 금액은 0이 됩니다.
예:
2009/09/01 1,000
2009/11/01 3,000
2007/12/01 2,000
발췌:
2009년 4,000명
2008년 0
2007년 2,000명
②월 단위로 계산 시, 빈 달이 있는 경우 해당 월의 금액을 0으로 처리합니다.
2009/09/01 1,000
2009/11/01 3,000
2009/12/01 2,000
발췌:
2009/09 1,000
2009/10 0
2009/11 3,000
2009/12 2,000
비교적 간단하게 이 작업을 수행할 수 있습니까?
연간 통계에 따르면
일반 사본을 클립보드 인쇄로 보시겠습니까?
WITH tmp_table AS (SELECT MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS MINYEAR
LB01_PURRECEIVEBOOK T에서
),
select_table AS(
TMP.YEARSUM, TMP.YEAR, TMP.YMD를 선택하세요.
FROM (SELECT SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE DESC) AS YEARSUM,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy') AS 연도,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') AS YMD,
ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE) AS RN
LB01_PURRECEIVEBOOK에서 T) TMP
여기서 TMP.RN = 1
),
creatyear_table AS(
SELECT tmp_table.MINYEAR + LEVEL - 1 AS tmp_year FROM DUAL, tmp_table
레벨별로 연결 <= tmp_table.NUM + 1
)
선택하다
ct.tmp_년,
NVL(st.YEARSUM, 0) AS YEARSUM
에서
creatyear_table ct,
select_table st
어디
ct.tmp_year = st.year(+)
WITH tmp_table AS (SELECT MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS MINYEAR
LB01_PURRECEIVEBOOK T에서
),
select_table AS(
TMP.YEARSUM, TMP.YEAR, TMP.YMD를 선택하세요.
FROM (SELECT SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE DESC) AS YEARSUM,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy') AS 연도,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') AS YMD,
ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE) AS RN
LB01_PURRECEIVEBOOK에서 T) TMP
여기서 TMP.RN = 1
),
creatyear_table AS(
SELECT tmp_table.MINYEAR + LEVEL - 1 AS tmp_year FROM DUAL, tmp_table
레벨별로 연결 <= tmp_table.NUM + 1
)
선택하다
ct.tmp_년,
NVL(st.YEARSUM, 0) AS YEARSUM
에서
creatyear_table ct,
select_table st
어디
ct.tmp_year = st.year(+)
월별 통계
일반 사본을 클립보드 인쇄로 보시겠습니까?
WITH tmp_table AS (SELECT MAX(TO_CHAR(T.PURRECEIVEDATE, 'mm')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) AS NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) AS MINMM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'YYYY')) AS MINY
LB01_PURRECEIVEBOOK T에서
),
select_table AS(
TMP.MMSUM, TMP.MM, TMP.YMD를 선택하세요.
FROM (SELECT SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') ORDER BY T.PURRECEIVEDATE DESC) AS MMSUM,
TO_CHAR(T.PURRECEIVEDATE, 'MM') AS MM,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') AS YMD,
ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') ORDER BY T.PURRECEIVEDATE) AS RN
LB01_PURRECEIVEBOOK에서 T) TMP
여기서 TMP.RN = 1
),
creatyear_table AS(
SELECT tmp_table.MINMM + LEVEL - 1 AS TMP_MM,
TO_CHAR(TO_DATE(MINY || tmp_table.MINMM + LEVEL - 1, 'YYYY-MM'), 'YYYY-MM') AS TMP_YM
듀얼에서 tmp_table
레벨별로 연결 <= tmp_table.NUM + 1
)
선택하다
ct.TMP_YM,
TO_CHAR(NVL(ST.MMSUM, 0), '9,999') AS MMSUM
에서
creatyear_table CT,
select_table ST
어디
CT.TMP_MM = ST.MM(+)
주문 방법
ct.TMP_YM
-