[AccessD] Two Column Table Convert Rows To Columns

Paul Hartland paul.hartland at googlemail.com
Thu Apr 28 10:29:50 CDT 2016


Thank you so very much

On 28 April 2016 at 16:23, jack drawbridge <jackandpat.d at gmail.com> wrote:

> Paul,
> I created a table (PaulH) based on your data.
>
> Item_No,    Branch_Code
> 12345,        ABC
> 12345,        DTR
> 12345,        GTH
> 23456,        AAA
> 23456,        AAB
>
> This is the query:
> SELECT DISTINCT Item_no
> , Concatrelated("Branch_code","PaulH","Item_no='" & [Item_no]& "'" ) AS
> ConcatOnBranch
> FROM PaulH;
>
>
> This is the Result:
> Item_no    ConcatOnBranch
> 12345    ABC , DTR , GTH
> 23456    AAA , AAB
>
> Here is the ConcatRelated function from Allen Browne
> from http://allenbrowne.com/func-concat.html
>
>
> '---------------------------------------------------------------------------------------
> ' Procedure : ConcatRelated
> ' Author    : AllenBrowne
> ' Date      : 12-11-2011
> ' Purpose   :
>
> '---------------------------------------------------------------------------------------
> ' Last Modified:
> '
> ' Inputs: N/A
> ' Dependency: N/A
> '--------------------------------------------------------------------------
> '
> Public Function ConcatRelated(strField As String, _
>     strtable As String, _
>     Optional strWhere As String, _
>     Optional strOrderBy As String, _
>     Optional strSeparator = " , ") As Variant  '  was " , "
> 10    On Error GoTo Err_Handler
>           'Purpose:   Generate a concatenated string of related records.
>           'Return:    String variant, or Null if no matches.
>           'Arguments: strField = name of field to get results from and
> concatenate.
>           '           strTable = name of a table or query.
>           '           strWhere = WHERE clause to choose the right values.
>           '           strOrderBy = ORDER BY clause, for sorting the values.
>           '           strSeparator = characters to use between the
> concatenated values.
>           'Notes:     1. Use square brackets around field/table names with
> spaces or odd characters.
>           '           2. strField can be a Multi-valued field (A2007 and
> later), but strOrderBy cannot.
>           '           3. Nulls are omitted, zero-length strings (ZLSs) are
> returned as ZLSs.
>           '           4. Returning more than 255 characters to a recordset
> triggers this Access bug:
>           '               http://allenbrowne.com/bug-16.html
>           Dim rs As DAO.Recordset         'Related records
>           Dim rsMV As DAO.Recordset       'Multi-valued field recordset
>           Dim strSQL As String            'SQL statement
>           Dim strOut As String            'Output string to concatenate to.
>           Dim lngLen As Long              'Length of string.
>           Dim bIsMultiValue As Boolean    'Flag if strField is a
> multi-valued field.
>
>           'Initialize to Null
> 20        ConcatRelated = Null
>
>           'Build SQL string, and get the records.
> 30        strSQL = "SELECT  " & strField & " FROM " & strtable   'distinct
> jed@@@@@
> 40        If strWhere <> vbNullString Then
> 50            strSQL = strSQL & " WHERE " & strWhere
> 60        End If
> 70        If strOrderBy <> vbNullString Then
> 80            strSQL = strSQL & " ORDER BY " & strOrderBy
> 90        End If
> 100       Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenDynaset)
>           'Determine if the requested field is multi-valued (Type is above
> 100.)
> 110       bIsMultiValue = (rs(0).Type > 100)
>
>           'Loop through the matching records
> 120       Do While Not rs.EOF
> 130           If bIsMultiValue Then
>                   'For multi-valued field, loop through the values
> 140               Set rsMV = rs(0).Value
> 150               Do While Not rsMV.EOF
> 160                   If Not IsNull(rsMV(0)) Then
> 170                       strOut = strOut & rsMV(0) & strSeparator
>
> 180                   End If
> 190                   rsMV.MoveNext
> 200               Loop
> 210               Set rsMV = Nothing
> 220           ElseIf Not IsNull(rs(0)) Then
> 230               strOut = strOut & rs(0) & strSeparator
> 240           End If
> 250           rs.MoveNext
> 260       Loop
> 270       rs.Close
>
>           'Return the string without the trailing separator.
> 280       lngLen = Len(strOut) - Len(strSeparator)
> 290       If lngLen > 0 Then
> 300           ConcatRelated = Left(strOut, lngLen)
> 310       End If
>
> Exit_Handler:
>           'Clean up
> 320       Set rsMV = Nothing
> 330       Set rs = Nothing
> 340       Exit Function
>
> Err_Handler:
> 350       MsgBox "Error " & Err.Number & ": " & Err.Description,
> vbExclamation, "ConcatRelated()"
> 360       Resume Exit_Handler
> End Function
>
>
> Good luck.
>
> On Thu, Apr 28, 2016 at 10:36 AM, Paul Hartland <
> paul.hartland at googlemail.com> wrote:
>
> > To all,
> >
> > Having a bit of a brain freeze here and can't seem to find the answer in
> > google....I have a table with two columns Item_No, Branch_Code and I will
> > have data similar to below:
> >
> > Item_No    Branch_Code
> > 12345        ABC
> > 12345        DTR
> > 12345        GTH
> > 23456        AAA
> > 23456        AAB
> >
> > and what I need is
> >
> > Item_No      Branch_Code
> > 12345          ABC, DTR, GTH
> > 23456          AAA, AAB
> >
> > Could someone please point me in the right direction, this sounds as if
> it
> > should be simple enough and I am 100% sure I have done this before....
> >
> > MANY MANY thanks in advance for any help on this.
> >
> >
> >
> > --
> > Paul Hartland
> > paul.hartland at googlemail.com
> > --
> > AccessD mailing list
> > AccessD at databaseadvisors.com
> > http://databaseadvisors.com/mailman/listinfo/accessd
> > Website: http://www.databaseadvisors.com
> >
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
>



-- 
Paul Hartland
paul.hartland at googlemail.com


More information about the AccessD mailing list