Stackoverflowers,
I have a resultset from a SQL query in the form of:
Category Column2 Column3
A 2 3.50
A 3 2
B 3 2
B 1 5
...
I need to group the resultset based on the Category column and sum the values for Column2 and Column3. I have to do it in code because I cannot perform the grouping in the SQL query that gets the data due to the complexity of the query (long story). This grouped data will then be displayed in a table.
I have it working for specific set of values in the Category column, but I would like a solution that would handle any possible values that appear in the Category column.
I know there has to be a straightforward, efficient way to do it but I cannot wrap my head around it right now. How would you accomplish it?
EDIT
I have attempted to group the result in SQL using the exact same grouping query suggested by Thomas Levesque and both times our entire RDBMS crashed trying to process the query.
I was under the impression that Linq was not available until .NET 3.5. This is a .NET 2.0 web application so I did not think it was an option. Am I wrong in thinking that?
EDIT
Starting a bounty because I believe this would be a good technique to have in the toolbox to use no matter where the different resultsets are coming from. I believe knowing the most concise way to group any 2 somewhat similar sets of data in code (without .NET LINQ) would be beneficial to more people than just me.
EDIT
Here is the solution I came up with in VB.NET in case anyone needs it. It uses the answer by Paul Williams as the starting point. I am taking the values directly from a datareader.:
Public Class Accumulator
Public sum1 As Integer
Public sum2 As Decimal
End Class
If IReader.HasRows Then
Dim grouping As New Dictionary(Of String, Accumulator)
Do While IReader.Read
Dim sum As New Accumulator
If grouping.ContainsKey(IReader.GetString(0)) Then
sum = grouping.Item(IReader.GetString(0))
Else
sum = New Accumulator
grouping.Item(IReader.GetString(0)) = sum
End If
sum.sum1+= IReader.GetInt32(1)
sum.sum2 += IReader.GetInt32(2)
Loop
For Each key As KeyValuePair(Of String, Accumulator) In grouping
"DO WHAT YOU NEED TO DO WITH THE VALUES HERE"
Next
End If