i am calculating Percentage it giving this error
Divide by zero error encountered.Warning: Null value is eliminated by an aggregate or other SET operation.
CREATE TABLE #Category (CID INT ,CName VARCHAR ( 50 )); CREATE TABLE #Sections (SecID INT ,Secnam VARCHAR ( 50 )); CREATE TABLE #ItemMasterFile(CodeItem INT ,Descriptionitem VARCHAR ( 50 ),SecID INT ,CID INT ,weight int ); CREATE TABLE #Bigbalprd(BID INT ,CodeItem INT ,SecID INT ,CID INT ,Bpqty INT ,Entrydate DATETIME , DelID int ,Bweight int ); CREATE TABLE #Probale(BID INT ,CodeItem INT ,prdQTY INT ,weight int ,Entrydate DATETIME ,DelID int ); CREATE TABLE #Emp_Strength(EID INT ,SecID INT ,QTY int , Entrydate DATETIME ); INSERT INTO #Category VALUES ( 1 , ' INDIA' ),( 2 , ' INDIA(Cut)' ),( 3 , ' Pakistan' ),( 4 , ' Pakistan(Cut)' ) INSERT INTO #Sections VALUES ( 1 , ' HR' ),( 2 , ' Baby' ),( 3 , ' Ladies' ),( 4 , ' Mix Rammage' ),( 5 , ' T-Shirst' ),( 6 , ' Scrap' ),( 7 , ' Scrit' ),( 8 , ' Men' ),( 9 , ' HHR' ),( 10 , ' Sports' ),( 11 , ' m-HR' ),( 12 , ' M-Baby' ),( 13 , ' M-Ladies' ),( 14 , ' M-Mix Rammage' ),( 15 , ' m--Shirst' ),( 16 , ' M-Scrap' ),( 17 , ' M-Scrit' ),( 18 , ' M-Men' ),( 19 , ' M-HHR' ),( 20 , ' M-Sports' );; INSERT INTO #ItemMasterFile VALUES ( 1 , ' A' , 1 , 1 , 100 ) , ( 2 , ' B' , 2 , 2 , 100 ) , ( 3 , ' C' , 3 , 3 , 100 ) , ( 4 , ' D' , 4 , null , 100 ) , ( 5 , ' e' , 5 , null , 100 ) , ( 6 , ' f' , 6 , null , 100 ) , ( 7 , ' g' , 4 , 2 , 100 ) , ( 8 , ' h' , 4 , 3 , 100 ) , ( 9 , ' K' , 2 , 2 , 100 ) , ( 10 , ' L' , 4 , 3 , 100 ) , ( 11 , ' M' , 2 , 4 , 100 ); INSERT INTO #Bigbalprd VALUES ( 1 , 1 , 1 , 1 , 1 , ' 01-06-2019' , null , 100 ) , ( 2 , 3 , 3 , 3 , 1 , ' 02-06-2019' , null , 100 ) , ( 3 , 4 , null , 4 , 1 , ' 03-06-2019' , null , 100 ) , ( 4 , 4 , null , 4 , 1 , ' 04-06-2019' , null , 100 ) , ( 4 , 5 , null , 4 , 1 , ' 04-06-2019' , null , 100 ); INSERT INTO #Probale VALUES ( 1 , 1 , 1 , 100 , ' 01-06-2019' , null ) , ( 2 , 3 , 1 , 200 , ' 02-06-2019' , null ) , ( 3 , 11 , 1 , 200 , ' 03-06-2019' , null ) , ( 4 , 10 , 1 , 200 , ' 08-06-2019' , null ) , ( 3 , 8 , 1 , 200 , ' 03-06-2019' , null ) , ( 4 , 9 , 1 , 200 , ' 08-06-2019' , null ) , ( 4 , 9 , 1 , 200 , ' 08-06-2019' , null ); INSERT INTO #Emp_Strength VALUES ( 1 , 1 , 4 , ' 01-05-2019' ) , ( 2 , 3 , 5 , ' 02-05-2019' ) , ( 3 , 3 , 3 , ' 03-05-2019' ) , ( 4 , 4 , 7 , ' 04-05-2019' ); DECLARE @StartDate DATETIME , @Enddate DATETIME SET @StartDate = ' 01-06-2019' SET @Enddate = ' 09-06-2019' ; WITH emp select Secnam,ISNULL(sum(e.qty), 0 ) Employee_QTY from #Sections s left join #Emp_Strength e on s.secid=e.secid where (Entrydate BETWEEN @StartDate AND @Enddate or Entrydate is null ) group by Secnam ),cte SELECT DISTINCT Sec.Secnam, ISNULL(SUM(b1.Bpqty), 0 )Bigbale_QTY,ISNULL(sum(b1.Bweight), 0 )Bigbale_Weight, ISNULL(SUM(b.prdQTY), 0 )Smallbale_QTY,ISNULL(SUM( case when b.prdQTY is null then 0 else i.weight end ), 0 )Small_Bale_weight -- ISNULL(SUM(emp.QTY),0)Employee_QTY FROM #ItemMasterFile i LEFT OUTER JOIN #Probale b ON i.CodeItem = b.CodeItem LEFT OUTER JOIN #Bigbalprd b1 ON i.CodeItem = b1.CodeItem Full Outer Join #Sections sec on i.SecID=sec.SecID -- left join Emp_Strength emp on emp.SecID = sec.SecID -- FULL OUTER JOIN Sections s ON i.SecID = s.SecID where (b.DelID is null and b.Entrydate BETWEEN @StartDate AND @Enddate or b.EntryDate is null ) (b1.DelID is null and b1.EntryDate BETWEEN @StartDate AND @Enddate or b1.EntryDate is Null ) GROUP BY sec.Secnam ),cte1 as ( SELECT cte.secnam, Smallbale_QTY,Small_Bale_weight, Bigbale_QTY, Bigbale_Weight, ( SELECT SUM(val) FROM ( VALUES (Bigbale_QTY) , (Smallbale_QTY) ) AS value(val) ) AS Total_QTY, ( SELECT SUM(val) FROM ( VALUES (Bigbale_Weight), (Small_Bale_weight ) ) AS value(val) ) as Total_Weight, -- For Percentage-- ( Select (ISNULL(Small_Bale_weight, 0 ))/(( SELECT SUM(val) FROM ( VALUES (Bigbale_Weight), (Small_Bale_weight ) ) AS value(val) ))*100. 0 ) as Percentage, coalesce (Employee_QTY, 0 ) Employee_QTY FROM cte left join emp on cte.secnam=emp.secnam group by cte.secnam,cte.Smallbale_QTY,cte.Bigbale_Weight,cte.Small_Bale_weight,cte.Bigbale_QTY,emp.Employee_QTY) select * from cte1 where Smallbale_QTY+Small_Bale_weight+Bigbale_QTY+Bigbale_Weight+Total_QTY+Total_Weight+Employee_QTY+Percentage<>0
What I have tried:
i tried to used null but it is say isnull require to argument which i tried to adjust Like isnull(A,0) but not getting adjusted..
-- For Percentage-- ( Select (ISNULL(Small_Bale_weight, 0 ))/(ISNULL( SELECT SUM(val) FROM ( VALUES (Bigbale_Weight), (Small_Bale_weight ) ) AS value(val) ))*100. 0 ) as Percentage, If you want to avoid a division by zero error when using ISNULL then don't choose zero as the substitution for null in the divisor - use 1 instead (as division by 1 is the original value).
However, all of your val values must be null for SUM(val) to return null. We know that isn't the case so that isn't actually your underlying problem.
Look at
Bigbale_Weight + Small_Bale_weight for secnam = M-Baby, M-HHR, m-HR etc … all zero. You are calculating percentage for all rows in the table
Change the calculation for percentage to handle that fact e.g.
SQL
-- For Percentage-- CASE WHEN ISNULL(Bigbale_Weight, 0 ) + ISNULL(Small_Bale_weight, 0 ) <> 0 THEN (ISNULL(Small_Bale_weight, 0 ) / ISNULL(Bigbale_Weight + Small_Bale_weight, 1 )) * 100 . 0 ELSE 0 END AS [Percentage],Note the square brackets around "Percentage" - that's because it is a reserved word in SQL and shouldn't really be used as a column name (unless surrounded by [ ] ).
I've also simplified the calculation by removing SUM here but your use of the sub-query is arguably better as you wouldn't need the ISNULL I've used. However, I suspect my version is faster.
Finally, I'm upvoting your question because you gave us everything we needed to reproduce the problem - thank you! BTW: [w] and [s] have been added by me to correct spellings.
Now, take a look at your code:
-- For Percentage-- ( Select (ISNULL(Small_Bale_weight, 0 ))/( ISNULL( SELECT SUM(val) FROM ( VALUES (Bigbale_Weight), (Small_Bale_weight ) ) AS value(val) ))*100. 0 ) as Percentage, ... -- comma and zero are missing
  • Read the question carefully.
  • Understand that English isn't everyone's first language so be lenient of bad spelling and grammar.
  • If a question is poorly phrased then either ask for clarification, ignore it, or edit the question and fix the problem. Insults are not welcome.
  • Don't tell someone to read the manual. Chances are they have and don't get it. Provide an answer or move on to the next question. Let's work to help developers, not make them feel stupid.
  •