ฉันเห็นปัญหาใน csdn และคิดเกี่ยวกับมันจึงเขียนขึ้นมา โปรดแก้ไขฉันหากฉันผิด
ฟังก์ชั่นหน้าจอต้องใช้คำจำกัดความตารางทางสถิติสำหรับข้อมูลในตาราง (ละเว้นฟิลด์ที่ไม่ได้ใช้)
LB01_PURRECEIVEBOOK
-
วันที่ดำเนินการ, --รูปแบบ: 11/2009
หมายเลขรับ
-
1 เมื่อนับตามปี ถ้ามีปีว่าง จำนวนปีนั้นจะเป็น 0
ตัวอย่าง:
2009/09/01 1,000
2552/11/01 3,000
2550/12/01 2,000
สารสกัด:
2552 4,000
2551 0
2550 2,000
②เมื่อคำนวณตามเดือน หากมีเดือนว่าง จำนวนเดือนนั้นจะถูกตั้งค่าเป็น 0
2009/09/01 1,000
2552/11/01 3,000
2552/12/01 2,000
สารสกัด:
2552/52 1,000
2009/10 0
2552/54 3,000
2552/55 2,000
สิ่งนี้สามารถทำได้ค่อนข้างง่ายหรือไม่?
ตามสถิติประจำปี
ดู plaincopy ไปที่ clipboardprint หรือไม่
ด้วย tmp_table AS (เลือก MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) เป็น MINYEAR
จาก LB01_PURRECEIVEBOOK ต
-
เลือก_ตาราง AS (
เลือก TMP.YEARSUM, TMP.YEAR, TMP.YMD
จาก (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') เรียงลำดับตาม T.PURRECEIVEDATE) AS RN
จาก LB01_PURRECEIVEBOOK T) TMP
โดยที่ TMP.RN = 1
-
creatyear_table AS (
เลือก tmp_table.MINYEAR + ระดับ - 1 เป็น tmp_year จาก DUAL, tmp_table
เชื่อมต่อตามระดับ <= tmp_table.NUM + 1
-
เลือก
ct.tmp_ปี,
NVL(st.YEARSUM, 0) เป็น YEARSUM
จาก
creatyear_table กะรัต
select_table เซนต์
ที่ไหน
ct.tmp_year = ปี (+)
ด้วย tmp_table AS (เลือก MAX(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) AS NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'yyyy')) เป็น MINYEAR
จาก LB01_PURRECEIVEBOOK ต
-
select_table AS (
เลือก TMP.YEARSUM, TMP.YEAR, TMP.YMD
จาก (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') เรียงลำดับตาม T.PURRECEIVEDATE) AS RN
จาก LB01_PURRECEIVEBOOK T) TMP
โดยที่ TMP.RN = 1
-
creatyear_table AS (
เลือก tmp_table.MINYEAR + ระดับ - 1 เป็น tmp_year จาก DUAL, tmp_table
เชื่อมต่อตามระดับ <= tmp_table.NUM + 1
-
เลือก
ct.tmp_ปี,
NVL(st.YEARSUM, 0) เป็น YEARSUM
จาก
creatyear_table กะรัต
select_table เซนต์
ที่ไหน
ct.tmp_year = ปี (+)
สถิติรายเดือน
ดู plaincopy ไปที่ clipboardprint หรือไม่
ด้วย tmp_table AS (เลือกสูงสุด (TO_CHAR (T.PURRECEIVEDATE, 'mm')) -
MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) AS NUM,
MIN(TO_CHAR(T.PURRECEIVEDATE, 'mm')) เป็น MINMM
MIN(TO_CHAR(T.PURRECEIVEDATE, 'YYYY')) เป็นจำนวนเล็กน้อย
จาก LB01_PURRECEIVEBOOK ต
-
เลือก_ตาราง AS (
เลือก TMP.MMSUM, TMP.MM, TMP.YMD
จาก (เลือก SUM(T.RECEIVEAMT) OVER(PARTITION BY TO_CHAR(T.PURRECEIVEDATE, 'MM') เรียงลำดับตาม T.PURRECEIVEDATE DESC) เป็น 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') เรียงลำดับตาม T.PURRECEIVEDATE) AS RN
จาก LB01_PURRECEIVEBOOK T) TMP
โดยที่ TMP.RN = 1
-
creatyear_table AS (
เลือก tmp_table.MINMM + ระดับ - 1 เป็น TMP_MM
TO_CHAR(TO_DATE(MINY || tmp_table.MINMM + LEVEL - 1, 'YYYY-MM'), 'YYYY-MM') AS TMP_YM
จาก DUAL, tmp_table
เชื่อมต่อตามระดับ <= tmp_table.NUM + 1
-
เลือก
ct.TMP_YM,
TO_CHAR(NVL(ST.MMSUM, 0), '9,999') เป็น MMSUM
จาก
creatyear_table CT,
select_table ST
ที่ไหน
CT.TMP_MM = ST.MM(+)
สั่งซื้อโดย
ct.TMP_YM
-