SQL handles inventory and sales, first in first out

From , 3 Years ago, written in SQL, viewed 226 times.
URL https://pastebin.vip/view/da0dba87
  1. --SQL处理库存与销售,先进先出原则
  2. --库存表
  3. CREATE TABLE t(
  4. id INT IDENTITY(1,1),
  5. name VARCHAR(50),--商品名称
  6. j INT,        --入库数量
  7. c INT,        --出库数量
  8. jdate datetime --入库时间
  9. )
  10. INSERT INTO t(name,j,c,jdate) SELECT  'A',100,0,'2007-12-01'
  11. INSERT INTO t(name,j,c,jdate) SELECT  'A',200,0,'2008-01-07'
  12. INSERT INTO t(name,j,c,jdate) SELECT  'B',320,0,'2007-12-21'
  13. INSERT INTO t(name,j,c,jdate) SELECT  'A',100,0,'2008-01-15'
  14. INSERT INTO t(name,j,c,jdate) SELECT  'B',90,0,'2008-02-03'
  15. INSERT INTO t(name,j,c,jdate) SELECT  'A',460,0,'2008-02-01'
  16. INSERT INTO t(name,j,c,jdate) SELECT  'A',510,0,'2008-03-01'
  17. GO
  18.  
  19.  
  20.  
  21. CREATE   proc wsp
  22. @name VARCHAR(50),
  23. @cost INT--,--销售量
  24. --@returns int output --该货物的库存是否够(不够:-1;够:1)
  25. AS
  26. --先得出该货物的库存是否够
  27. DECLARE @spare FLOAT --剩余库存
  28. SELECT @spare=SUM(j)-SUM(c) FROM t WHERE name=@name
  29. IF(@spare>=@cost)
  30. BEGIN
  31.     --根据入库日期采用先进先出原则对货物的库存进行处理
  32.     UPDATE t SET c=
  33.     CASE WHEN (SELECT @cost-isnull(SUM(j),0)+isnull(SUM(c),0) FROM t WHERE name=@name AND jdate<=a.jdate AND j!=c)>=0
  34.     THEN a.j
  35.     ELSE
  36.         CASE WHEN (SELECT @cost-isnull(SUM(j),0)+isnull(SUM(c),0) FROM t WHERE name=@name AND jdate<a.jdate AND j!=c)<0 THEN 0
  37.         ELSE (SELECT @cost-isnull(SUM(j),0)+isnull(SUM(c),0)+a.c FROM t WHERE name=@name AND jdate<a.jdate AND j!=c)
  38.         END
  39.     END
  40.     FROM t a WHERE name=@name AND j!=c
  41. END
  42. ELSE
  43.     raiserror('库存不足',16,1)    
  44.     RETURN
  45. GO
  46.  
  47.  
  48. --测试:
  49.  
  50. EXEC wsp @name='A',@cost=390
  51. SELECT * FROM t
  52.  
  53. --删除测试环境
  54. DROP TABLE t
  55. DROP proc wsp
  56.  
  57. //SQL/819

Reply to "SQL handles inventory and sales, first in first out"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website