ช่วยหน่อยครับ คือฐานข้อมูลมันแยกกันตามรูปแบบนี้อะครับ แต่ผมจะทำการซื้อขายสินค้าตามรูปอะครับ ผมควจจะเขียนโค้ดยังไงดีอะครับ
เป็นการออกแบบฐานข้อมูลที่แปลกๆไม่มี PK .... เข้าใจว่า drg_id เป็น FK มาจากอีกตารางไช่ไหมครับ. ..
- น่าจะเป็นลักษณะสินค้าชิ้นเดียวกันแต่ป้อนเข้ามาคนละวันประมาณนี้ไช่ไหมครับ
ดังนั้นข้อมูลที่คิวรี่มาได้ในส่วนรหัสสินค้า - กลุ่มยา ต้องมาจากตารางแม่(ตารางที่ให้กำเนิดdrg_id)
ไล่ลงมาถึง จำนวนที่มี ก็ค่อยไป sum ตารางในภาพนี้เหละ โดยเพิ่มเงื่อนใข drg_id = ตัวที่ต้องการ
คร่าวๆก็ประมาณนี้เหละมั้งครับ . . .
*** แนะนำว่าควรใส่สักฟิลไว้เป็น PK นะครับปล่อยเป็นเลขรันautoแบบไม่สนใจเลยก็ได้ เวลา UPDATE/DELETE จะได้มีตัวชี้เป้าจะได้ง่ายไม่ยุ่งยากในภายหลัง
ประวัติการแก้ไข 2014-03-05 15:46:37
Date :
2014-03-05 15:45:08
By :
meannerss
คิดเล่น ๆ ผมทำไม่ได้แต่อาจมีคนทำได้ ตัวหลักสำคัญ "วันหมดอายุ"
select * from stock where Drg_name = 'ชื่อยา' order by Drg_Exp ASC
1. มันก็จะได้ 5 กล่องมาก่อนถูกป่ะ ก็เอา 15 เข้าไปลบเลย ติดลบ 10 แล้วนะ
2. พอลูปที่ 2 มันก็จะได้ยา 13 กล่องออกมา ก็เอาไป +(-10) ใช้นี้มันซะ
สุดท้ายเราก็จะเหลือยาที่วันหมดอายุมากกว่าเก็บไว้ เป็นแนวคิดครับ
Date :
2014-03-05 16:39:42
By :
apisitp
LIFO Query Basic Sample
Code (SQL)
DECLARE @Drg_QttTotal INT = 15 -- จำนวนที่สั่งซื้อ แม่งขายดีนี่หว่า
SELECT Drg_Exp
,CASE
WHEN (
SELECT SUM(Drg_QttTotal)
FROM @Stocks s2
WHERE s2.Drg_Exp >= s1.Drg_Exp
) > @Drg_QttTotal
THEN @Drg_QttTotal - (
SELECT ISNULL(SUM(Drg_QttTotal), 0)
FROM @Stocks s2
WHERE s2.Drg_Exp > s1.Drg_Exp
)
ELSE Drg_QttTotal
END AS Drg_QttTotal
,Unt_Name
FROM @Stocks s1
WHERE ((
SELECT ISNULL(SUM(Drg_QttTotal), 0)
FROM @Stocks s2
WHERE s2.Drg_Exp > s1.Drg_Exp
) < @Drg_QttTotal) AND (Drg_ID = 630)
[x] SQL Server ISNULL() == MySQL IFNULL()
GoodLuck.
Date :
2014-03-05 16:56:20
By :
love9713
จาก #NO 4 ให้เปลี่ยน @Stocks เป็นชื่อตารางของคุณ เห็นแว๊ปฯว่าซื่อ Stock
Date :
2014-03-05 17:00:43
By :
love9713
***การซื้อก็หักจากวันที่หมดอายุก่อน
drg_exp drg_Qty
2012-12-04 13
2015-03-05 5
ผมดูวันที่ผิดไป ของคุณถูกต้องแล้ว เป็นแบบ FIFO (First In First Out)
เพราะฉะนั้น LIFO Query Basic Sample คุณก็แค่เปลี่ยนเงื่อนไข
เปลี่ยน >= เป็น <=
เปลี่ยน > เป็น <
ข้อสังเกตุ Query ข้างบนจะทำงานไม่ถูกต้องในกรณีข้อมูลวันเดียวกันมีมากกว่า 1 ระเบียนในแต่ละ drg_Id เช่น
drg_exp drg_Qty
2012-12-04 13
2015-03-05 5
2015-03-05 5
Date :
2014-03-06 07:47:58
By :
love9713
Load balance : Server 04