csdn で問題を見て考えて書きました。間違っていたら訂正してください。
画面機能には、テーブル内のデータの統計テーブル定義が必要です(未使用フィールドを省略)
LB01_PURRECEIVEBOOK
(
PURECEIVEDATE 日付、--形式: 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') 年として、
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_year、
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') 年として、
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_year、
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
-