Advertisement
MarMar_IV

tsql-pr1

Mar 22nd, 2015
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.75 KB | None | 0 0
  1. --SELECT * FROM Invoice ii JOin ProductInvoice pii ON ii.idInvoice=pii.idInvoice
  2. --SELECT * FROM CostHistory
  3. --SELECT * FROM Invoice ii
  4. --SELECT * FROM Product p
  5.  
  6. --CREATE FUNCTION func_getProductCost_FromHistory(@p_date DATE) RETURNS FLOAT
  7. ALTER FUNCTION func_getProductCost_FromHistory(@p_productID int, @p_date DATE) RETURNS FLOAT
  8. AS
  9. BEGIN
  10.     DECLARE @v_result FLOAT;
  11.     DECLARE @v_cost FLOAT;
  12.  
  13.     SET @v_result = -1;
  14.     DECLARE ccc CURSOR FOR (SELECT ch.cost as CENA FROM CostHistory ch WHERE ch.idProduct=@p_productID AND (@p_date BETWEEN ch."from" AND ch."to"));
  15.     OPEN ccc;  
  16.     FETCH NEXT FROM ccc INTO @v_cost;
  17.     WHILE(@@FETCH_STATUS=0)BEGIN   
  18.         SET @v_result = @v_cost;
  19.  
  20.         FETCH NEXT FROM ccc INTO @v_cost;
  21.     END;    
  22.     CLOSE ccc;
  23.     DEALLOCATE ccc;
  24.  
  25.     RETURN @v_result;
  26. END;
  27.  
  28. --CREATE FUNCTION func_haveProductCostHistory(@p_productID int) RETURNS BIT
  29. ALTER FUNCTION func_haveProductCostHistory(@p_productID int) RETURNS BIT
  30. AS
  31. BEGIN
  32.     DECLARE @v_count INT;
  33.     SELECT @v_count = COUNT(*) FROM CostHistory ch WHERE ch.idProduct=@p_productID;
  34.  
  35.     if(@v_count>0)BEGIN
  36.         RETURN 1;
  37.     END;
  38.  
  39.     RETURN 0;
  40. END;
  41.  
  42. BEGIN
  43.     DECLARE @v_invoceID INT;
  44.     DECLARE @v_PRICE FLOAT;
  45.     DECLARE @v_productPrice FLOAT;
  46.     DECLARE @v_productID INT;
  47.     DECLARE @v_invoceDate DATE;
  48.     DECLARE @v_haveProductCostHistory BIT;
  49.     DECLARE @v_amount INT;
  50.  
  51.     SET @v_PRICE = 0;
  52.  
  53.  
  54.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  55.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  56.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  57.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  58.     SET @v_invoceID = 2;
  59.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  60.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  61.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  62.     --ID OBJEDNÁVKY!!!!!!!!!!!!!!!!!!!!!!!!
  63.  
  64.     DECLARE ccc CURSOR FOR (SELECT pii.idProduct, ii."timestamp" FROM Invoice ii JOin ProductInvoice pii ON ii.idInvoice=pii.idInvoice WHERE pii.idInvoice=@v_invoceID);
  65.     OPEN ccc;  
  66.     FETCH NEXT FROM ccc INTO @v_productID, @v_invoceDate;
  67.     WHILE(@@FETCH_STATUS=0)BEGIN   
  68.         SET @v_productPrice = -1;
  69.  
  70.         SET @v_haveProductCostHistory = dbo.func_haveProductCostHistory(@v_productID);
  71.         IF(@v_haveProductCostHistory=1)BEGIN
  72.             SET @v_productPrice = dbo.func_getProductCost_FromHistory(@v_productID, @v_invoceDate);
  73.         END;
  74.         --PRINT CAST(@v_productID as VARCHAR) + ' - ' + CAST(@v_haveProductCostHistory as VARCHAR);
  75.  
  76.         IF(@v_productPrice=-1)BEGIN
  77.             SELECT @v_productPrice=p.cost FROM Product p WHERE p.idProduct=@v_productID
  78.         END;
  79.  
  80.  
  81.         SELECT @v_amount=prodi.amount FROM ProductInvoice prodi WHERE prodi.idProduct=@v_productID AND prodi.idInvoice=@v_invoceID
  82.         --PRINT @v_productPrice;
  83.  
  84.         SET @v_PRICE = @v_PRICE+(@v_productPrice*@v_amount);
  85.  
  86.         FETCH NEXT FROM ccc INTO @v_productID, @v_invoceDate;
  87.     END;    
  88.     CLOSE ccc;
  89.     DEALLOCATE ccc;
  90.  
  91.     PRINT @v_PRICE;
  92. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement