Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Display Group by sum in new column

Tags:

c#

datatable

sum

I want to display group by sum in new column in same data table. For example:

input

I want output to be like:

output

I have tried like below:

  1. group by sno and stored in different table.
  2. by using for loop, i am assigning total values to old data table.
for (int o = 0; o < returndata.Rows.Count;o++)
{
    for (int i = 0; i < table.Rows.Count;i++)
    {
        if(returndata.Rows[o]["sno"].ToString() == table.Rows[i]["sno"].ToString())
        {
            table.Rows[i]["total"] = returndata.Rows[o]["total"];
        }
    }
}

Is there any other way to directly assign sum values using c# linq?

like image 823
Bin Avatar asked Jan 25 '26 16:01

Bin


1 Answers

While the question is tagged for c#, and there are many ways to do it in c#, I would just like to stress databases are more geared towards data manupulation/transformation than programming languages. Things like this should be left to database, especially when the amount of data is huge. All you need is modify the query to let database do the part.

e.g. in SQL Server, it should be simply like this:

select sno, amount, total = sum(amount) over (partition by sno) from YourTable

This will give you exactly what you are looking for, without slowing down your application.

enter image description here

EDIT, after OP's comment

When altering the query is not an option, the easies way to do it in .NET is to use DataTable.Compute method.

foreach (DataRow row in returndata.Rows)
{
    row["total"] = returndata.Compute("sum(amount)", "sno=" + row["sno"].ToString());
}

datatable compute

like image 177
Pradeep Kumar Avatar answered Jan 27 '26 05:01

Pradeep Kumar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!