I need to calculate the total value of a specific range of product codes. The product codes I need the calculation done on are 5780 and everything under 5700.
To get the total value I need the total cost of those products as well as the yield.
Value = Pirce * Yield %
To calculate the yield I use the equation:
CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
WHEN [PC].[ProductCategoryCode] = 5730
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
WHEN [PC].[ProductCategoryCode] = 5990
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
ELSE Sum([PL].[OriginalQuantity_Stk]) / @Credits
END
The price is already in the system so I don't need to calculate that.
I have tried several equations to calculate the total value but none of them return the desired amount.
I feel like it should be similar to this equation but this just displays the value for each row as opposed to one total value:
SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (
PARTITION BY (
CASE
WHEN PC.ProductCategoryCode = 5780
OR [PC].[ProductCategoryCode] < 5700
THEN PC.ProductCategoryCode
END
)
) * ICP.UnitCost
This equation displays one total sum but the total is incorrect:
CASE
WHEN [PC].[ProductCategoryCode] = 5780 OR [PC].[ProductCategoryCode] < 5700
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits * [ICP].[UnitCost]) OVER ()
END
I think that maybe I need the SUM of the UnitCost as well but when I try to do that inside the equation I get errors.
Sample Output:
--------------------------------
Product Category Code | Value |
----------------------x--------x
5870 | 100 |
5730 | 400 |
5990 | 200 |
5780 | 200 |
1111 | 50 |
2222 | 175 |
3333 | 500 |
4444 | 125 |
Total Value: 1050 It has to ignore product code 5870, 5990, and 5730 and not include those in the total value.
I am using Microsoft SQL Sever 2005. Let me know if I need to explain further.
Full Code:
SET NOCOUNT ON;
DECLARE @Credits DECIMAL(19, 8);
DECLARE @Price DECIMAL(19, 8);
SET @Credits = 41000;
SET @Price = 1.57;
SELECT CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN 'Trimmings'
WHEN [PC].[ProductCategoryCode] = 5730
THEN 'Rib Tips'
WHEN [PC].[ProductCategoryCode] = 5990
THEN 'Skins'
ELSE [PC].[Description1]
END AS [Description]
,SUM(SUM(PL.OriginalQuantity_Stk)) OVER (
PARTITION BY (
CASE
WHEN PC.ProductCategoryCode IN (
5870
,5730
,5990
)
THEN PC.ProductCategoryCode
END
)
) AS [Total Weight]
,Sum(CASE
WHEN [PC].[ProductCategoryCode] <> 5870
THEN [PL].[OriginalQuantity_Stk]
WHEN [PC].[ProductCategoryCode] <> 5730
THEN [PL].[OriginalQuantity_Stk]
WHEN [PC].[ProductCategoryCode] <> 5990
THEN [PL].[OriginalQuantity_Stk]
END) AS [Weight]
,@Credits - SUM(Sum([PL].[OriginalQuantity_Stk])) OVER () AS [Shrink]
,CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
WHEN [PC].[ProductCategoryCode] = 5730
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
WHEN [PC].[ProductCategoryCode] = 5990
THEN SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
ELSE Sum([PL].[OriginalQuantity_Stk]) / @Credits
END AS [Yield]
,CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN [ICP].[UnitCost]
WHEN [PC].[ProductCategoryCode] = 5730
THEN [ICP].[UnitCost] - 0.25
WHEN [PC].[ProductCategoryCode] = 5990
THEN [ICP].[UnitCost] * 0
ELSE [ICP].[UnitCost]
END AS [UC]
,CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN [ICP].[UnitCost] * SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
WHEN [PC].[ProductCategoryCode] = 5730
THEN ([ICP].[UnitCost] - 0.25) * SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
WHEN [PC].[ProductCategoryCode] = 5990
THEN ([ICP].[UnitCost] * 0) * SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
ELSE [ICP].[UnitCost] * SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (PARTITION BY [PC].[ProductCategoryCode])
END AS [Value]
,SUM(Sum([PL].[OriginalQuantity_Stk]) / @Credits) OVER (
PARTITION BY (
CASE
WHEN PC.ProductCategoryCode = 5780
OR [PC].[ProductCategoryCode] < 5700
THEN PC.ProductCategoryCode
END
)
) * ICP.UnitCost AS [TotalValue]
FROM (
(
(
(
IC_Products [PC] INNER JOIN DC_Transactions [DCT] ON [PC].ProductKey = [DCT].ProductKey
) INNER JOIN AR_Customers [ARC] ON [DCT].CustomerKey = [ARC].CustomerKey
) INNER JOIN IC_ProductLots [PL] ON [DCT].LotKey = [PL].LotKey
) LEFT JOIN IC_ProductCosts [ICP] ON ICP.ProductKey = PC.ProductKey
AND ICP.ProductCostCode = 5
)
WHERE (
[PL].ProductionDate >= { ts '2015-07-10 00:00:00' }
AND (
[PL].ProductionDate <= { ts '2015-07-10 00:00:00' }
OR [PL].ProductionDate IS NULL
)
)
AND (
(1 = 1)
AND [ARC].CustomerKey IN (39)
)
GROUP BY CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN 'Trimmings'
WHEN [PC].[ProductCategoryCode] = 5730
THEN 'Rib Tips'
WHEN [PC].[ProductCategoryCode] = 5990
THEN 'Skins'
ELSE [PC].[Description1]
END
,[ARC].CustomerKey
,[PC].ProductCategoryCode
,CASE
WHEN [PC].[ProductCategoryCode] = 5870
THEN [ICP].[UnitCost]
WHEN [PC].[ProductCategoryCode] = 5730
THEN [ICP].[UnitCost] - 0.25
WHEN [PC].[ProductCategoryCode] = 5990
THEN [ICP].[UnitCost] * 0
ELSE [ICP].[UnitCost]
END
,[ICP].UnitCost
,[PC].ProcessCode
ORDER BY @Credits - SUM(Sum([PL].[OriginalQuantity_Stk])) OVER ()
,SUM(SUM(PL.OriginalQuantity_Stk)) OVER (
PARTITION BY (
CASE
WHEN PC.ProductCategoryCode IN (
5870
,5730
,5990
)
THEN PC.ProductCategoryCode
END
)
)
Aucun commentaire:
Enregistrer un commentaire