Saya melihat masalah di csdn dan memikirkannya lalu menulisnya. Mohon koreksi saya jika saya salah.
Fungsi layar memerlukan definisi tabel statistik untuk data dalam tabel (menghilangkan bidang yang tidak digunakan)
LB01_PURRECEIVEBOOK
(
TANGGAL PEMBELIAN, --format: 2009/11/01
NOMOR TERIMA
)
① Jika dihitung berdasarkan tahun, jika ada tahun kosong maka jumlah tahun tersebut adalah 0
contoh:
2009/09/01 1.000
2009/11/01 3.000
2007/12/01 2.000
Ekstrak:
2009 4.000
2008 0
2007 2.000
②Saat menghitung berdasarkan bulan, jika ada bulan kosong, jumlah bulan tersebut akan disetel ke 0
2009/09/01 1.000
2009/11/01 3.000
2009/12/01 2.000
Ekstrak:
2009/09 1.000
2009/10 0
2009/11 3.000
2009/12 2.000
Bisakah hal ini dilakukan dengan relatif sederhana?
Menurut statistik tahunan
lihat salinan biasa ke cetak papan klip?
DENGAN tmp_table AS (PILIH MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) SEBAGAI NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) SEBAGAI MINYEAR
DARI LB01_PURRECEIVEBOOK T
),
pilih_tabel AS (
PILIH TMP.YEARSUM, TMP.TAHUN, TMP.YMD
DARI (PILIH SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE DESC) SEBAGAI JUMLAH TAHUN,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy') SEBAGAI TAHUN,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') SEBAGAI YMD,
ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE) SEBAGAI RN
DARI LB01_PURRECEIVEBOOK T) TMP
DIMANA TMP.RN = 1
),
creatyear_table AS (
PILIH tmp_table.MINYEAR + LEVEL - 1 SEBAGAI tmp_year DARI DUAL, tmp_table
HUBUNGKAN BERDASARKAN TINGKAT <= tmp_table.NUM + 1
)
MEMILIH
ct.tmp_tahun,
NVL(st.YEARSUM, 0) SEBAGAI YEARSUM
DARI
creatyear_table ct,
pilih_tabel st
DI MANA
ct.tmp_year = st.tahun(+)
DENGAN tmp_table AS (PILIH MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) SEBAGAI NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) SEBAGAI MINYEAR
DARI LB01_PURRECEIVEBOOK T
),
pilih_tabel AS (
PILIH TMP.YEARSUM, TMP.TAHUN, TMP.YMD
DARI (PILIH SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE DESC) SEBAGAI JUMLAH TAHUN,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy') SEBAGAI TAHUN,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') SEBAGAI YMD,
ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'yyyy') ORDER BY T.PURRECEIVEDATE) SEBAGAI RN
DARI LB01_PURRECEIVEBOOK T) TMP
DIMANA TMP.RN = 1
),
creatyear_table AS (
PILIH tmp_table.MINYEAR + LEVEL - 1 SEBAGAI tmp_year DARI DUAL, tmp_table
HUBUNGKAN BERDASARKAN TINGKAT <= tmp_table.NUM + 1
)
MEMILIH
ct.tmp_tahun,
NVL(st.YEARSUM, 0) SEBAGAI YEARSUM
DARI
creatyear_table ct,
pilih_tabel st
DI MANA
ct.tmp_year = st.tahun(+)
Statistik berdasarkan bulan
lihat salinan biasa ke cetak papan klip?
DENGAN tmp_table AS (PILIH MAX(TO_CHAR(T.PURRECEIVEDATE, 'mm')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) SEBAGAI NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) SEBAGAI MINMM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'YYYY')) SEBAGAI MINY
DARI LB01_PURRECEIVEBOOK T
),
pilih_tabel AS (
PILIH TMP.MMSUM, TMP.MM, TMP.YMD
DARI (PILIH SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') ORDER BY T.PURRECEIVEDATE DESC) SEBAGAI MMSUM,
TO_CHAR(T.PURRECEIVEDATE, 'MM') SEBAGAI MM,
TO_CHAR(T.PURRECEIVEDATE, 'yyyy/mm/dd') SEBAGAI YMD,
ROW_NUMBER() OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') ORDER BY T.PURRECEIVEDATE) SEBAGAI RN
DARI LB01_PURRECEIVEBOOK T) TMP
DIMANA TMP.RN = 1
),
creatyear_table AS (
PILIH tmp_table.MINMM + LEVEL - 1 SEBAGAI TMP_MM,
TO_CHAR(TO_DATE(MINY || tmp_table.MINMM + LEVEL - 1, 'YYYY-MM'), 'YYYY-MM') SEBAGAI TMP_YM
DARI GANDA, tmp_table
HUBUNGKAN BERDASARKAN TINGKAT <= tmp_table.NUM + 1
)
MEMILIH
ct.TMP_YM,
TO_CHAR(NVL(ST.MMSUM, 0), '9,999') SEBAGAI MMSUM
DARI
CT tahun_kreasi_tabel,
pilih_tabel ST
DI MANA
CT.TMP_MM = ST.MM(+)
PESAN OLEH
ct.TMP_YM
-