สมมุติเทเบิล T มีฟิลด์รายการสินค้า ItemCD, วันที่ D, ยอดยกมา BFQty, จำนวนรับเข้าในวันนั้น InQty, จำนวนจ่ายออกในวันนั้น OutQty และมี Primary Key เป็น ItemCD, D
คิวรี่คือ
SELECT T1.BFQty+(select nz(sum(T2.InQty),0) from T as T2 where T2.ItemCD = T1.ItemCD and T2.D <= T1.D)-(select nz(sum(T2.OutQty),0) from T as T2 where T2.ItemCD = T1.ItemCD and T2.D < T1.D) AS TotalQty, *
FROM T AS T1
ORDER BY T1.ItemCD, T1.D;
ความหมายคือ
T1.BFQty
ยอดยกมา
+ (select nz(sum(T2.InQty),0) from T as T2 where T2.ItemCD = T1.ItemCD and T2.D <= T1.D)
+ ผมรวมของจำนวนรับเข้าสำหรับสินค้าเดียวกันตั้งแต่วันแรกจนถึงวันนั้น (วันของเรคอร์ดนั้น)
(select nz(sum(T2.OutQty),0) from T as T2 where T2.ItemCD = T1.ItemCD and T2.D < T1.D)
- ผมรวมของจำนวนจ่ายออกสำหรับสินค้าเดียวกันตั้งแต่วันแรกจนถึงก่อนวันนั้น (วันของเรคอร์ดนั้น)
ที่ต้องใส่ฟังก์ชั่น nz( ) เพราะถ้าผลรวมนั้นไม่มีมาก่อน เช่นจำนวนจ่ายออกของวันที่น้อยกว่าวันแรก ซึ่งไม่มีค่า จะไม่ใช่ศูนย์ แต่เป็น NULL ซึ่งพอเอามาคำนวนกับค่าอื่นแล้ว จะให้ผลลัพธ์ซึ่งก็คือช่อง TotalQty ของเรคอร์ดนั้นเป็น NULL ไปด้วย ดังนั้นถ้าต้องการให้เป็นศูนย์ เราจึงต้องใส่ฟังก์ชั่น nz(... , 0) เพื่อแปลงค่า NULL เป็นศูนย์แทน