การหายอดสต็อกคงเหลือ (STOCK BALANCE)
สร้างตารางชั่่วคราวตัวอย่างทดสอบกันก่อน (มีชื่อว่า #Test)
CREATE TABLE #Test    (
      id INT IDENTITY(1,1) NOT NULL,
      ItemCode CHAR(10) ,
      QtyIn MONEY ,
      QtyOut MONEY
    )
INSERT  INTO #Test
   VALUES  ( '1', 200, 0 ),
           ( '1', 250, 0 ),
           ( '1', 300, 0 ),
           ( '2', 150, 0 ),
           ( '2', 0, 150 ),
           ( '2', 300, 0 ),
           ( '2', 100, 0 )
-- เรียกดูข้อมูล
SELECT * FROM #Test
-- ทำการหายอดคงเหลือของสต็อก แสดงในลักษณะของการ์ดแสดงยอดคงเหลือ (Stock Card)
SELECT  * ,
        SUM(QtyIn - QtyOut) OVER ( PARTITION BY ItemCode ORDER BY ItemCode, id ) 
                 AS CurrBAL
FROM    #Test
ORDER BY ItemCode, id
จะได้ผลลัพธ์ดังภาพ
จะเห็นว่าการนำเอา OVER PARTITION BY มาใช้งานทำให้เราสามารถคำนวณยอดสต็อกออกมาได้อย่างง่ายดาย
การหายอดสะสม  (ACCUMULATE)
การคำนวณยอดสะสมเราก็มักจะโดยให้ทำรายงานหรีอเขียนโปรแกรมกันบ่อยๆ ซึ่งก็ไม่ยากอีกเช่นกัน มาลองศึกษาตามกันเลยครับ
CREATE TABLE #DrCr   (
      id INT IDENTITY(1,1) NOT NULL,
      ItemCode CHAR(10) ,
      Amt1 MONEY ,
      Amt2 MONEY
    )
INSERT  INTO #DrCr
   VALUES  ( '101', 200, 100 ),
           ( '101', 50,100 ),
           ( '101', 150, 100 ),
           ( '102', 550, 50 ),
           ( '102', 200, 150 ),
           ( '102', 10, 100 ),
           ( '102', 60, 300 )
ทีนี้เราจะนำเอายอดของ Amt1 บวกกับ Amt2 แล้วสะสมไปเรื่อยๆ โดยแบ่งตามกลุ่มของ ItemCode
SELECT id, ItemCode, Amt1, Amt2,
SUM(Amt1+Amt2) OVER (PARTITION BY ItemCode
ORDER BY ItemCode, id ROWS UNBOUNDED PRECEDING) AS AccuAmt
FROM #Accu
จะได้ผลลัพธ์ดังภาพ
SELECT id, ItemCode, Amt1, Amt2,
SUM(Amt1+Amt2) OVER (PARTITION BY ItemCode
ORDER BY ItemCode, id ROWS UNBOUNDED PRECEDING) AS AccuAmt
FROM #Accu
จะได้ผลลัพธ์ดังภาพ
จะเห็นว่ามีการนำเอา OVER PARTITION BY ItemCode -- คำสั่งนี้จะหมายถึงแบ่งกลุ่มตาม ItemCode
แล้วเรียงลำดับตาม ItemCode, id ด้วยคำสั่ง ORDER BY ItemCode, id
ROWS เป็นการกำหนดการคำนวณค่าที่เกิดขึ้นของแถวต่างๆ ที่เกี่ยวข้องให้กับแถวปัจจุบัน
UNBOUNDED PRECEDING เป็นการกำหนดให้เริ่มคำนวณต้้งแต่แถวแรกของกลุ่ม (PARTITION BY) จนถึงแถวปัจจุบัน
เอาละครับสำหรับการหา Stock Balance และ Accumulate ก็คงทำให้การทำงานสะดวกขึ้น
สวัสดีมีเวลาเยอะๆ
 


 
1 ความคิดเห็น:
Pragmatic Play rolls out new slot machines - JT Hub
The latest release by Pragmatic Play, the 5×3, 경상북도 출장샵 cluster 경기도 출장안마 pays slot, has been made available 청주 출장안마 at top casino 청주 출장안마 sites for 2021. The slot has been around for a while 세종특별자치 출장샵 and
แสดงความคิดเห็น