[AccessD] Merge records

Arthur Fuller fuller.artful at gmail.com
Tue May 29 09:07:47 CDT 2007


If you think about it, JC, DELETE * is kind of redundant. What else could
you mean?. You can't delete all the values in a column, for example. You can
DELETE WHERE but that is still all the columns.

On 5/29/07, jwcolby <jwcolby at colbyconsulting.com> wrote:
>
> A.D.
>
> When I removed the first * from the query the "SQL Check" stopped giving
> me
> errors.  Apparently the syntax:
>
> "DELETE * FROM tblData"
>
> Is invalid in SQL Server, whereas:
>
> "DELETE FROM tblData"
>
> is valid.
>
> Now that I am beyond that stumbling block, let me test and get back to
> you.
>
> Thanks for all of your help.
>
> John W. Colby
> Colby Consulting
> www.ColbyConsulting.com
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of A.D.TEJPAL
> Sent: Monday, May 28, 2007 3:03 PM
> To: Access Developers discussion and problem solving
> Cc: ADT
> Subject: Re: [AccessD] Merge records
>
> John,
>
>    Sample update query given below, will update fields F1 to F4 in table
> tblData. If any field is empty, it will get filled in by the first
> significant value occurring in any record for this field, for the given
> HashPerson. This query makes use of function Fn_MergedValue(), also given
> below.
>
>    After updating, duplicate records can be removed by running the sample
> delete query as given below.
>
>    For a large sized table with large number of fields, if serious slow
> down is experienced while running the update query, you could consider
> carrying out the update process for a few fields at a time
>
>
> Best wishes,
> A.D.Tejpal
> ---------------
>
> Query for updating fields F1 to F4
> (If the field is empty, first available value)
> ======================================
> UPDATE tblData SET tblData.F1 = Fn_MergedValue("F1",[F1],[HashPerson]),
> tblData.F2 = Fn_MergedValue("F2",[F2],[HashPerson]), tblData.F3 =
> Fn_MergedValue("F3",[F3],[HashPerson]), tblData.F4 =
> Fn_MergedValue("F4",[F4],[HashPerson]);
> ======================================
>
> Query for deleting duplicate HashPersons
> ======================================
> DELETE * FROM tblData
> WHERE (SELECT Count(*) FROM tblData As T1 WHERE T1.HashPerson =
> tblData.HashPerson AND T1.PKID <= tblData.PKID) > 1;
> ======================================
>
> Fn_MergedValue() - User defined function
> ======================================
> Function Fn_MergedValue( _
>                ByVal FieldName As String, _
>                ByVal FieldValue As Variant, _
>                ByVal HashPersonValue _
>                As String) As String
>    Dim Qst As String, Fdv As String
>    Dim rst As DAO.Recordset
>
>    Fdv = Nz(FieldValue, "")
>    ' If field has significant value, retain it
>    If Len(Fdv) > 0 Then
>        GoTo ExitPoint
>    End If
>
>    ' If field is empty, fill in the first significant value
>    ' occuring in any record for this field, for the
>    ' given HashPerson
>    Qst = "SELECT TOP 1 " & FieldName & _
>            " FROM tblData WHERE  " & _
>            "HashPerson = '" & HashPersonValue & _
>            "' And Len(" & FieldName & ") > 0;"
>    Set rst = DBEngine(0)(0).OpenRecordset(Qst)
>
>    If rst.RecordCount > 0 Then
>        Fdv = Nz(rst.Fields(0), "")
>    End If
>
> ExitPoint:
>
>    Fn_MergedValue = Fdv
>
>    On Error Resume Next
>    rst.Close
>    Set rst = Nothing
>    On Error GoTo 0
>
>    ' Note - For repetitive use, DBEngine(0)(0)
>    '            is preferred over CurrentDb
> End Function
> ======================================
>
> ----- Original Message -----
> From: jwcolby
> To: 'Access Developers discussion and problem solving' ;
> dba-sqlserver at databaseadvisors.com
> Sent: Sunday, May 27, 2007 23:25
> Subject: [AccessD] Merge records
>
>
> I have a situation where I might have several data records in a table (the
> big 700 field table) that are about the same person / address but have
> different data in some of the other fields.  These records represent
> answers to surveys and so if a person answered three surveys, the person
> could have three records in the database.  I need to merge the data from
> the
> three records into a single record, and eventually delete the other two.
>
> I have developed a field that represents the SHA1 hash of the address,
> zip5, zip4, lastname and firstname.  I am running some tests to see
> whether
> this hash is unique across 50 million records (unique to that name /
> address) but I suspect that it will be.  Once I determine that it is, then
> I
> can use that single field as a single "person identifier" field.
>
> So I need pointers how to "merge" the data from one record into a second
> record, only merging fields where there is legitimate data, and not
> overwriting fields where there is already data.
>
> John W. Colby
> Colby Consulting
> www.ColbyConsulting.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
>



More information about the AccessD mailing list