การหายอดสต็อกคงเหลือ (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
แสดงความคิดเห็น