Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 17th, 2012  |  syntax: None  |  size: 3.28 KB  |  hits: 9  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How to achieve right result from a table list
  2. MaterialNumber ExpiryDate Quantity
  3. -------------- ---------- --------
  4. 11111          10-12-2011 50
  5. 11111          10-18-2011 100
  6. 11111          01-15-2012 500
  7. 22222          11-18-2011 0
  8. 22222          05-01-2012 200
  9. 33333          12-17-2011 200
  10. 33333          04-01-2012 -275
  11.        
  12. SupplyID MaterialNumber ExpiryDate Quantity
  13. -------- -------------- ---------- --------
  14. 1        11111          10-12-2011 100
  15. 2        11111          10-18-2011 700
  16. 3        11111          01-15-2012 500
  17. 4        22222          11-18-2011 250
  18. 5        22222          05-01-2012 475
  19. 6        33333          12-17-2011 200
  20. 7        33333          04-01-2012 300
  21.  
  22.  
  23.  
  24. RequestID MaterialNumber RequiredDate Quantity
  25. --------- -------------- ------------ --------
  26. 1         11111          10-01-2011   50
  27. 2         11111          10-14-2011   600
  28. 3         22222          10-17-2011   400
  29. 4         22222          04-02-2012   125
  30. 5         33333          12-22-2011   175
  31. 6         33333          01-10-2012   400
  32.  
  33.  
  34. CREATE TABLE TC74_Supply
  35. (
  36.     SupplyID INT IDENTITY,
  37.     MaterialNumber VARCHAR(5),
  38.     ExpiryDate DATE,
  39.     Quantity INT
  40. )
  41. GO
  42. INSERT INTO TC74_Supply(MaterialNumber,ExpiryDate,Quantity)
  43. SELECT '11111','10-12-2011',100 UNION ALL
  44. SELECT '11111','10-18-2011',700 UNION ALL
  45. SELECT '11111','01-15-2012',500 UNION ALL
  46. SELECT '22222','11-18-2011',250 UNION ALL
  47. SELECT '22222','05-01-2012',475 UNION ALL
  48. SELECT '33333','12-17-2011',200 UNION ALL
  49. SELECT '33333','04-01-2012',300
  50.  
  51. CREATE TABLE TC74_SupplyRequest(
  52.     RequestID INT IDENTITY,
  53.     MaterialNumber VARCHAR(5),
  54.     RequiredDate DATE,
  55.     Quantity INT
  56. )
  57. GO
  58.  
  59. INSERT INTO TC74_SupplyRequest(MaterialNumber,RequiredDate,Quantity)
  60. SELECT '11111','10-01-2011',50 UNION ALL
  61. SELECT '11111','10-14-2011',600 UNION ALL
  62. SELECT '22222','10-17-2011',400 UNION ALL
  63. SELECT '22222','04-02-2012',125 UNION ALL
  64. SELECT '33333','12-22-2011',175 UNION ALL
  65. SELECT '33333','01-10-2012',400
  66.        
  67. SELECT
  68.     a.SupplyID,
  69.     a.MaterialNumber,
  70.     a.ExpiryDate,
  71.     a.Quantity,
  72.     a.test1,
  73.     godis =(SELECT top 1 a.Quantity - c.Quantity
  74.             FROM (SELECT
  75.                     b.RequestID,
  76.                     b.MaterialNumber,
  77.                     b.RequiredDate,
  78.                     b.Quantity,
  79.                     test2 = DENSE_RANK() OVER(PARTITION BY b.MaterialNumber ORDER BY b.RequestID)
  80.                   FROM TC74_SupplyRequest b) c
  81.             WHERE MaterialNumber = c.MaterialNumber AND a.test1 = c.test2),
  82.     a.lll
  83. FROM
  84. (
  85.     SELECT
  86.         SupplyID,
  87.         MaterialNumber,
  88.         ExpiryDate,
  89.         Quantity,
  90.         test1 = DENSE_RANK() OVER(PARTITION BY MaterialNumber ORDER BY SupplyID),
  91.         lll = 321
  92.      FROM
  93.         TC74_Supply
  94. ) a
  95.        
  96. select *, Quantity - isnull(Demand, 0) Vasted
  97. from TC74_Supply
  98. outer Apply
  99. (
  100.   select sum (Quantity) Demand
  101.     from TC74_SupplyRequest
  102.    where TC74_Supply.MaterialNumber = TC74_SupplyRequest.MaterialNumber
  103.      and TC74_Supply.ExpiryDate >= TC74_SupplyRequest.RequiredDate
  104.      and TC74_SupplyRequest.RequiredDate >=
  105.          (select isnull (max(a.ExpiryDate),
  106.                             (select min(RequiredDate) from TC74_SupplyRequest))
  107.             from TC74_Supply a
  108.            where a.MaterialNumber = TC74_Supply.MaterialNumber
  109.              and a.ExpiryDate < TC74_Supply.ExpiryDate)
  110. ) a