[SQL] 库存先进先出简单例子 →→→→→进入此内容的聊天室

来自 , 2020-04-09, 写在 SQL, 查看 100 次.
URL http://www.code666.cn/view/19f01591
  1. CREATE TABLE t(
  2. id INT IDENTITY(1,1),
  3. name VARCHAR(50),--商品名称
  4. j INT, --入库数量
  5. c INT, --出库数量
  6. jdate datetime --入库时间
  7. )
  8. INSERT INTO t(name,j,c,jdate) SELECT 'A',100,0,'2007-12-01'
  9. INSERT INTO t(name,j,c,jdate) SELECT 'A',200,0,'2008-01-07'
  10. INSERT INTO t(name,j,c,jdate) SELECT 'B',320,0,'2007-12-21'
  11. INSERT INTO t(name,j,c,jdate) SELECT 'A',100,0,'2008-01-15'
  12. INSERT INTO t(name,j,c,jdate) SELECT 'B',90,0,'2008-02-03'
  13. INSERT INTO t(name,j,c,jdate) SELECT 'A',460,0,'2008-02-01'
  14. INSERT INTO t(name,j,c,jdate) SELECT 'A',510,0,'2008-03-01'
  15. GO
  16.  
  17.  
  18.  
  19. CREATE proc wsp
  20. @name VARCHAR(50),--商品名称
  21. @cost INT --销售量
  22. AS
  23. --先得出该货物的库存是否够
  24. DECLARE @spare FLOAT --剩余库存
  25. SELECT @spare=SUM(j)-SUM(c) FROM t WHERE name=@name
  26. IF(@spare>=@cost)
  27. BEGIN
  28. --根据入库日期采用先进先出原则对货物的库存进行处理
  29. UPDATE t SET c=
  30. 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
  31. THEN a.j
  32. ELSE
  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 THEN 0
  34. 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)
  35. END
  36. END
  37. FROM t a WHERE name=@name AND j!=c
  38. END
  39. ELSE
  40. raiserror('库存不足',16,1)
  41. RETURN
  42. GO
  43.  
  44.  
  45. --测试:
  46.  
  47. EXEC wsp @name='A',@cost=180
  48. SELECT * FROM t
  49.  
  50.  
  51. --drop table t
  52. --drop proc wsp
  53.  
  54. //SQL/1212

回复 "库存先进先出简单例子"

这儿你可以回复上面这条便签

captcha