Solved

Recursive function problem

Posted on 2006-11-14
4
220 Views
Last Modified: 2008-02-01
I have a datatable with the following columns:

Heading, Subheading, Number1, Number2, Number3, Number4

I need to sum the number columns for each Heading and Subheading. How do I do this using a recursive function? I vaguely remember recursion when I was studying, is it the best approach? The select statement that fills this datatable is ordered by Heading, Subheading.

In the future I may need to add deeper levels below the sub heading. I just need some pointers on how to get started writing the algorithm, the general idea of how to solve this.

Cheers




0
Comment
Question by:craigdev
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 43

Expert Comment

by:TimCottee
ID: 17936789
Hi craigdev,

Generally it is easier to let SQL do this for you if you already have the data there:

Select Heading, SubHeading, Sum(Number1) As Number1, Sum(Number2) As Number2, Sum(Number3) As Number3, Sum(Number4) As Number4 from MyTable Group By Heading,SubHeading Order By Heading,SubHeading

Tim Cottee
0
 
LVL 1

Author Comment

by:craigdev
ID: 17936837
true, thanks but then I have to write multiple select statements and try and combine all the results into a big table. What Im trying to do is make a versatile function that I can use to sum up any columns using a single select. The table that I mentioned may actually have several Heading and subheading columns and number columns. If I can get it to work in the case above then I can tweak the algorithm a bit for any case.
0
 
LVL 43

Accepted Solution

by:
TimCottee earned 500 total points
ID: 17937069
craigdev,

Ok, that makes it a slightly more interesting problem.

The following function returns a datatable when supplied with the source datatable, number of groupings and number of columns to sum.

The requirements are that the datatable has the grouping columns first, followed by the columns to total and that the ordering of the source table is heading,subheading,subsubheading etc.

    Private Function SumTable(ByRef Source As DataTable, ByVal Groups As Int16, ByVal Sums As Int16) As DataTable
        Dim Result As DataTable = New DataTable
        Dim aryGroups() As String
        ReDim aryGroups(Groups)
        Dim intGroup As Int16
        For intGroup = 0 To Groups - 1
            Result.Columns.Add(Source.Columns(intGroup).ColumnName, Type.GetType("System.String"))
        Next
        For intGroup = 0 To Sums - 1
            Result.Columns.Add(Source.Columns(intGroup + Groups).ColumnName, Type.GetType("System.Double"))
        Next
        Dim intRow As Integer
        Dim TargetRow As DataRow
        For intRow = 0 To Source.Rows.Count - 1
            Dim SourceRow As DataRow = Source.Rows(intRow)
            Dim NewRow As Boolean = False
            For intGroup = 0 To Groups - 1
                If CType(SourceRow.Item(intGroup), String) <> aryGroups(intGroup) Then
                    NewRow = True
                End If
            Next
            If NewRow Then
                TargetRow = Result.NewRow
                For intGroup = 0 To Groups - 1
                    aryGroups(intGroup) = CType(SourceRow.Item(intGroup), String)
                    TargetRow.Item(intGroup) = CType(SourceRow.Item(intGroup), String)
                Next
                For intGroup = 0 To Sums - 1
                    TargetRow.Item(Groups + intGroup) = 0
                Next
                Result.Rows.Add(TargetRow)
            End If
            For intGroup = 0 To Sums - 1
                Result.Rows(Result.Rows.Count - 1).Item(Groups + intGroup) = CType(CType(Result.Rows(Result.Rows.Count - 1).Item(Groups + intGroup), Double) + CType(Source.Rows(intRow).Item(Groups + intGroup), Double), String)
            Next
        Next
        Return Result
    End Function

This then will take any datatable in the appropriate format and return it summed on the various headings.

Tim
0
 
LVL 1

Author Comment

by:craigdev
ID: 17937160
thanks heaps that worked perfectly!
0

Featured Post

Ready to get started with anonymous questions?

It's easy! Check out this step-by-step guide for asking an anonymous question on Experts Exchange.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…

622 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question