How do I group by one column in the datatable and take the sum of another column based on this grouping. I have attached a sample file for better understanding.group and sum.xlsx (9.7 KB)
I did read this but i am unable to execute it. could you provide a work flow? It would be very helpful.
good that you have done this
Try from your end and upload the xaml here. Paste the error you derive as it would be helpful for the people who looks and get this issue.
Regards,
Dom
I mean I am unable to follow it.
I also tried the .compute method but i get this error.
consolidateTableCompute has thrown an exception
Source: Assign
Message: Invalid usage of aggregate function Sum() and Type: Object.
Exception Type: DataException
System.Data.DataException: Invalid usage of aggregate function Sum() and Type: Object.
at System.Data.Common.ObjectStorage.Aggregate(Int32 records, AggregateType kind)
at System.Data.DataColumn.GetAggregateValue(Int32 records, AggregateType kind)
at System.Data.AggregateNode.Eval(Int32 records)
at System.Data.DataExpression.Evaluate(DataRow rows, DataRowVersion version)
at System.Data.DataTable.Compute(String expression, String filter)
at lambda_method(Closure , ActivityContext )
at Microsoft.VisualBasic.Activities.VisualBasicValue1.Execute(CodeActivityContext context) at System.Activities.CodeActivity
1.InternalExecuteInResolutionContext(CodeActivityContext context)
at System.Activities.Runtime.ActivityExecutor.ExecuteInResolutionContext[T](ActivityInstance parentInstance, Activity1 expressionActivity) at System.Activities.InArgument
1.TryPopulateValue(LocationEnvironment targetEnvironment, ActivityInstance activityInstance, ActivityExecutor executor)
at System.Activities.RuntimeArgument.TryPopulateValue(LocationEnvironment targetEnvironment, ActivityInstance targetActivityInstance, ActivityExecutor executor, Object argumentValueOverride, Location resultLocation, Boolean skipFastPath)
at System.Activities.ActivityInstance.InternalTryPopulateArgumentValueOrScheduleExpression(RuntimeArgument argument, Int32 nextArgumentIndex, ActivityExecutor executor, IDictionary2 argumentValueOverrides, Location resultLocation, Boolean isDynamicUpdate) at System.Activities.ActivityInstance.ResolveArguments(ActivityExecutor executor, IDictionary
2 argumentValueOverrides, Location resultLocation, Int32 startIndex)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)
Hi,
Can you check this. It helps you.
file : group by one column in the datatable and take the sum.zip (3.1 KB)
Regards
Balamurugan.S
I will suggest you one more way try like this.
Let us take your excel stored in a datatable dta
First group the datatable based on ID by using below Query and assign it to dt1
dt1=(From p In dta.Select()
Group p by ID=p.Item(“ID”).ToString Into Group
Select Group(0)).ToArray.CopyToDataTable()
Now take only two columns by using below query
dt1=dt1.DefaultView.ToTable(False,“ID”,“Name”)
Now Add one datacolumn to dt1 by using add datacolumn activity and give name Amount to that column
Then create one list of strings ListA
Then use this query
ListA=(From p In dta.Select()
Group p By ID=p.Item(“ID”).ToString Into GroupA=Group
Select Convert.ToString(GroupA.Sum(Function(x) Convert.ToDouble(x.Item(“Amount”).ToString)))).ToList()
Next Run one Foreach loop for dt1
Inside for each use one assign activity
row(“Amount”)=ListA(dt1.Rows.IndexOf(row)).ToString
Now your dt1 will contain the required output and you can write to excel by using WriteRange.
Regards,
Mahesh
thanks @balupad14 and @MAHESH1.
@MAHESH1 your solution was worked well thanks.
Hi @jamnanin
Try this with less code.
Regards
Balamurugan
hello,
i cann’t found the “Amount” in the LisA assignation