Sum of a column giving wrong results
-
Monday, February 04, 2013 10:54 PM
Here's my SQL:
;Test1 AS ( SELECT C1.Col1 , C1.Col2 , C1.Col3 , C1.Col4 , [Status] = ( SELECT CASE WHEN [Status] IN ( 'Ind' ,'Act' ,'Bor' ) AND Col4 = 'Activated' THEN 'Dispose' ELSE [Status] END ) , C1.Col5 , CASE WHEN C1.Col2 = 'Used' Then C1.Col5 ELSE 0 END AS [UCost] , CASE WHEN C1.Col2 = 'Borrowed' Then C1.Col5 ELSE 0 END AS [BCost] FROM Cted C1 AND [Status] IN ( 'ABC', 'DEF', 'GHI', 'Dispose' ) ) Select C2.Col1 , C2.Col3 , SUM(Case When C2.Status = 'ABC' Then 1 Else 0 End) As [Tr1] , SUM(Case When C2.Status = 'DEF' Then 1 Else 0 End) As [Tr2] , SUM(Case When C2.Status = 'GHI' Then 1 Else 0 End) As [Tr3] , SUM(Case When C2.Status = 'Dispose' Then 1 Else 0 End) As [Tr4] , SUM(UCost) As Cost1 -- Gives me wrong results, seems to multiply the cost twice , SUM(BCost) As Cost2 -- Gives me wrong results, seems to multiply the cost twice From Test1 C2 Group By C2.Col1, C2.Col3 Order By C2.Col1When I run my query the SUM of my cost is giving me wrong results. Can you direct me in a right direction?
I want just 1 row for each Col1 (I am getting that), the columns are getting loaded properly, but its just the cost column that's giving me a trouble.
- Edited by SqlCraze Tuesday, February 05, 2013 5:53 AM
- Moved by Charlie LiaoMicrosoft Contingent Staff Wednesday, February 06, 2013 6:23 AM
All Replies
-
Tuesday, February 05, 2013 5:52 AM
Tried doing the SUM, in a select statement too. Like this..
Select columns, (select sum(ucost) from Test1) .. but even this doesn't seem to work.
-
Tuesday, February 05, 2013 5:59 AMCan you provide sample data?
Regards
Satheesh -
Tuesday, February 05, 2013 6:56 AM
The data in one of the rows looks like this:
Col1 Col3 ABC DEF GHI Dispose UCost BCost 121 GVE 12 0 0 0 $0.00 $16,576 (something like that) Data that I am expecting: Col1 Col3 ABC DEF GHI Dispose UCost BCost 121 GVE 12 0 0 0 $0.00 $708 -- There is another column (Col5) that's being utilized in identifying the UCost and BCost. The cost (Col5) of this "Col1" is $59. Since I am summing up the data, then, ideally, the value of "BCost" should be 12*59 = $708, but its giving me $16,000's
-
Tuesday, February 05, 2013 2:51 PMAny ideas? Suggestions?
-
Tuesday, February 05, 2013 3:05 PM
Any ideas? Suggestions?
To ask the question: There is too much going on for someone to easily read the code. Get rid of the irrelevant stuff.
To trouble-shoot yourself. Break down your code into test bits.
-
Tuesday, February 05, 2013 4:03 PM
It's just the SUM () that's giving me the problems.
Let me re-frame the question a little bit:
If this is some data in my table:
Id Desc S1 S2 S3 Cost
1 ABC 0 0 0 $0.00
1 ABC 1 0 0 $5.00
1 ABC 1 0 0 $5.00
2 DEF 0 0 0 $0.00
I want this result set:
Id Desc S1 S2 S3 Cost
1 ABC 2 0 0 $10.00
2 DEF 0 0 0 $0.00
-
Tuesday, February 05, 2013 4:23 PM
Excellent. Use Group by:
SELECT [desc], SUM ([cost]) FROM myTable GROUP BY [desc];
^^^How does this work?
-
Tuesday, February 05, 2013 4:30 PM
That's what I did ! But, using SUM multiplies the amount for some reason!!
-
Tuesday, February 05, 2013 4:47 PM
The query you originally posted is complete?
Try this, If this is not working please post some sample rows and desired output
;With Test1 AS ( SELECT C1.Col1 , C1.Col2 , C1.Col3 , C1.Col4 , [Status] =CASE WHEN [Status] IN ( 'Ind' ,'Act' ,'Bor' ) AND Col4 = 'Activated' THEN 'Dispose' ELSE [Status] END , C1.Col5 , CASE WHEN C1.Col2 = 'Used' Then C1.Col5 ELSE 0 END AS [UCost] , CASE WHEN C1.Col2 = 'Borrowed' Then C1.Col5 ELSE 0 END AS [BCost] FROM Cted C1 WHERE [Status] IN ( 'ABC', 'DEF', 'GHI', 'Dispose' ) ) Select C2.Col1 , C2.Col3 , SUM(Case When C2.Status = 'ABC' Then 1 Else 0 End) As [Tr1] , SUM(Case When C2.Status = 'DEF' Then 1 Else 0 End) As [Tr2] , SUM(Case When C2.Status = 'GHI' Then 1 Else 0 End) As [Tr3] , SUM(Case When C2.Status = 'Dispose' Then 1 Else 0 End) As [Tr4] , SUM(UCost) As Cost1 -- Gives me wrong results, seems to multiply the cost twice , SUM(BCost) As Cost2 -- Gives me wrong results, seems to multiply the cost twice From Test1 C2 Group By C2.Col1, C2.Col3,C2.Status Order By C2.Col1Regards
Satheesh -
Tuesday, February 05, 2013 5:02 PM
That's what I did ! But, using SUM multiplies the amount for some reason!!
that is what you think you did but you did something else.
Keep it simple and run that 3 line query and see what happens.
-
Tuesday, February 05, 2013 5:09 PM
I noticed earlier you stated
Tried doing the SUM, in a select statement too. Like this..
Select columns, (select sum(ucost) from Test1) .. but even this doesn't seem to work.
If that does not work then the code is not the issue. Forget about the code and get this right first.
Maybe someone heard of an SQL server going bonkers? I doubt it though. Get a small set of data and check it or dump it into an excel spreadsheet to check. You may not have the data you think you do. What is the dataType of that column?
- Proposed As Answer by CountryStyle Tuesday, February 05, 2013 5:10 PM
- Edited by CountryStyle Tuesday, February 05, 2013 5:10 PM
- Unproposed As Answer by CountryStyle Tuesday, February 05, 2013 5:10 PM
- Edited by CountryStyle Tuesday, February 05, 2013 5:11 PM
-
Tuesday, February 05, 2013 6:08 PMMoney !
-
Tuesday, February 05, 2013 6:26 PM
Money !
OK. I am a little old. Was that sarcastic? -
Tuesday, February 05, 2013 6:44 PMHaha. No. It's always good to hear the word money !!! So, i was like, money ! (wish I had some more ;) kinda like that !
-
Wednesday, February 06, 2013 6:28 AMSo did you try my solution, is it working or any problems with it?
Satheesh
-
Wednesday, February 06, 2013 3:49 PMTried it Satheesh. Doesn't give a right answer. Lokks like it sums all the data, not just the conditions I want to SUM on.
-
Wednesday, February 06, 2013 4:47 PM
Okay,
Can you post some same data not just one row. ?
Satheesh
-
Wednesday, February 06, 2013 5:49 PM
Hi Sqlcraze,
Tr columns and Cost are coming from sate table or different tables ?
Can you plz try this sql script.
SELECT
X.Col1,
X.Col3,
SUM(X.Tr1) AS Tr1,
SUM(X.Tr2) AS Tr2,
SUM(X.Tr3) AS Tr3,
SUM(X.Tr4) AS Tr4,
SUM(X.Cost1) AS Cost1,
SUM(X.Cost2) AS Cost2
FROM
(
Select
C2.Col1,
C2.Col3,
Case When C2.Status = 'ABC' Then 1 Else 0 End) As [Tr1],
Case When C2.Status = 'DEF' Then 1 Else 0 End) As [Tr2],
Case When C2.Status = 'GHI' Then 1 Else 0 End) As [Tr3],
Case When C2.Status = 'Dispose' Then 1 Else 0 End) As [Tr4],
UCost As Cost1 ,
BCost As Cost2
From
Test1 C2
) X
GROUP BY
X.Col1,
X.Col3------------------------------------------------------------------------
Please mark as answer or vote if it helps you...
-
Wednesday, February 06, 2013 6:13 PM
Anal. The poster said that even the sum([row]) function by itself was not giving the expected results.
Maybe they should get the basics straight first?
-
Thursday, February 07, 2013 2:26 PM
Hi Counterstyle,
I know that.
And this type of issue will occur when ur sql contains Summary data from more than 2 tables.
Issue with might me from 1st table it is coming perfectly but for 2nd table it might duplicate due to any join issue.
-
Thursday, February 07, 2013 2:43 PM
Hi Counterstyle,
I know that.
And this type of issue will occur when ur sql contains Summary data from more than 2 tables.
Issue with might me from 1st table it is coming perfectly but for 2nd table it might duplicate due to any join issue.
Ah.
Maybe it would be best then to have the OP do this by forgetting about the SUM() stuff and just get the basic join right?
There is no immediate need to do this is a single sql statement is there?
-
Thursday, February 07, 2013 9:00 PM
Here is a tip to properly analyze your problem.
1. Break your current query in these two steps
;WITH Test1 AS ( -- your current select ) SELECT * INTO #t FROM Test1 SELECT -- your current column list and expressions FROM #t C2 Group By C2.Col1, C2.Col3 Order By C2.Col1
2. Check if the results are correct. If they are, then you were probably running into bugs in SQL Server
3. If the results are still doubled, then your CTE does not return the result that you are expection. With "SELECT * FROM #t" you can now investigate where the actual data does not meet your expectations.
Gert-Jan
- Marked As Answer by Iric WenModerator Monday, February 18, 2013 3:11 AM

