![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
I have construced a string of people's surname who live in the same house Field name is XFirstSN E.G. Blackburn, Blackburn, Blackburn, Blackburn, Blackburn, Brooke, Brooke, Brooke, Edwards, Brooke, Brooke, Chalmers, Goodwin, Douglas, Allott, Douglas, Douglas, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, I want to reduce it to the basic names E.G Blackburn Brooke & Edwards Chalmers & Goodwin Douglas & Allott Rossi Start by creating a view that returns distinct names for each house. |
#3
| |||
| |||
|
|
I have construced a string of people's surname who live in the same house Field name is XFirstSN E.G. Blackburn, Blackburn, Blackburn, Blackburn, Blackburn, Brooke, Brooke, Brooke, Edwards, Brooke, Brooke, Chalmers, Goodwin, Douglas, Allott, Douglas, Douglas, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, I want to reduce it to the basic names E.G Blackburn Brooke & Edwards Chalmers & Goodwin Douglas & Allott Rossi FirstSN: [Member]![MemSurName] & IIf([Member_1]![MemSurName]>"" And [Member_1]![MemSurName]<>[Member]![MemSurName]," & " & [Member_1]![MemSurName]) & IIf([Member_2]![MemSurName]>"" And [Member_2]![MemSurName]<>[Member]![MemSurName]," & " & [Member_2]![MemSurName]) & IIf([Member_3]![MemSurName]>"" And [Member_3]![MemSurName]<>[Member]![MemSurName]," & " & [Member_3]![MemSurName]) & IIf([Member_4]![MemSurName]>"" And [Member_4]![MemSurName]<> [Member]![MemSurName]," & " & [Member_4]![MemSurName]) & IIf([Member_5]![MemSurName]>"" And [Member_5]![MemSurName]<>[Member]![MemSurName]," & " & [Member_5]![MemSurName]) & IIf([Member_6]![MemSurName]>"" And [Member_6]![MemSurName]<>[Member]![MemSurName]," & " & [Member_6]![MemSurName]) & IIf ([Member_7]![MemSurName]>"" And [Member_7]![MemSurName]<>[Member]![MemSurName]," & " & [Member_7]![MemSurName]) & IIf([Member_8]![MemSurName]>"" And [Member_8]![MemSurName]<>[Member]![MemSurName]," & " & [Member_8]![MemSurName]) This horrendoud IIf clause produces the right result, but I suspect it only works for 2 names The number of Member tables (Member to Member_8) is determined by the maximum number of people living at 1 address so this is variable. If instead of the current maximum of 9 people, it drops to say 8, the IIf clause will fail because thee won't be a Member_8 Incidenly, this is the query that is the source of the query that has the IIf clause. I suspext that as this is based on a crosstab query, "XAllNames", I am going to have to create it on the fly. SELECT Member.MemSurName, Member.MemFirstName, Member.MemTitle, Member.MemTitleOption, Member_1.MemSurName, Member_1.MemFirstName, Member_1.MemTitle, Member_1.MemTitleOption, Member_2.MemSurName, Member_2.MemFirstName, Member_2.MemTitle, Member_2.MemTitleOption, Member_3.MemSurName, Member_3.MemFirstName, Member_3.MemTitle, Member_3.MemTitleOption, Member_4.MemSurName, Member_4.MemFirstName, Member_4.MemTitle, Member_4.MemTitleOption, Member_5.MemSurName, Member_5.MemFirstName, Member_5.MemTitle, Member_5.MemTitleOption, Member_6.MemSurName, Member_6.MemFirstName, Member_6.MemTitle, Member_6.MemTitleOption, Member_7.MemSurName, Member_7.MemFirstName, Member_7.MemTitle, Member_7.MemTitleOption, Member_8.MemSurName, Member_8.MemFirstName, Member_8.MemTitle, Member_8.MemTitleOption FROM Member AS Member_8 RIGHT JOIN ((((((((XAllNames LEFT JOIN Member ON XAllNames.[1] = Member.MemberID) LEFT JOIN Member AS Member_1 ON XAllNames.[2] = Member_1.MemberID) LEFT JOIN Member AS Member_2 ON XAllNames.[3] = Member_2.MemberID) LEFT JOIN Member AS Member_3 ON XAllNames.[4] = Member_3.MemberID) LEFT JOIN Member AS Member_4 ON XAllNames.[5] = Member_4.MemberID) LEFT JOIN Member AS Member_5 ON XAllNames.[6] = Member_5.MemberID) LEFT JOIN Member AS Member_6 ON XAllNames.[7] = Member_6.MemberID) LEFT JOIN Member AS Member_7 ON XAllNames.[8] = Member_7.MemberID) ON Member_8.MemberID = XAllNames.[9]; Any thoughts please? Phil |
#4
| |||
| |||
|
|
My first thought is that you need to restructure the tables in your database. You have repeating data Member_1, Member_2, etc. That |
|
Member ON XAllNames.[1] = Member.MemberID) LEFT JOIN Member AS Member_1 ON XAllNames.[2] = Member_1.MemberID) LEFT JOIN Member AS Member_2 ON XAllNames.[3] = Member_2.MemberID) LEFT JOIN Member AS Member_3 ON XAllNames.[4] = Member_3.MemberID) LEFT JOIN Member AS Member_4 ON XAllNames.[5] = Member_4.MemberID) LEFT JOIN Member AS Member_5 ON XAllNames.[6] = Member_5.MemberID) LEFT JOIN Member AS Member_6 ON XAllNames.[7] = Member_6.MemberID) LEFT JOIN Member AS |
#5
| |||
| |||
|
|
John Spencer wrote: My first thought is that you need to restructure the tables in your database. You have repeating data Member_1, Member_2, etc. That That was my thought as well, until I looke more closely at his query and realized that the Member_X identifiers were aliases for the Members table which was joined multiple times LEFT JOIN Member ON XAllNames.[1] = Member.MemberID) LEFT JOIN Member AS Member_1 ON XAllNames.[2] = Member_1.MemberID) LEFT JOIN Member AS Member_2 ON XAllNames.[3] = Member_2.MemberID) LEFT JOIN Member AS Member_3 ON XAllNames.[4] = Member_3.MemberID) LEFT JOIN Member AS Member_4 ON XAllNames.[5] = Member_4.MemberID) LEFT JOIN Member AS Member_5 ON XAllNames.[6] = Member_5.MemberID) LEFT JOIN Member AS Member_6 ON XAllNames.[7] = Member_6.MemberID) LEFT JOIN Member AS |
#6
| |||
| |||
|
|
My first thought is that you need to restructure the tables in your database. You have repeating data Member_1, Member_2, etc. That implies that you need a HouseHolds table and a Members table. The Members table would look something like HouseHoldID (a value from the primary key of the households table) MemberSurname MemberNumber (if you had to order the names in some specific order, right now 1 to 8 would be the possible values) MemberFirstName ... If you cannot do this then use a UNION query to return a unique list of member surnames in each household and concatenate them together with one of the user-defined VBA concatenate functions. SELECT HouseholdID, Surname_1 FROM Households UNION SELECT HouseholdID, Surname_2 FROM Households UNION ... UNION SELECT HouseholdID, Surname_8 FROM Households With that query you will have a unique set of names for each household. Here are links (url) to three examples on concatenating a field from multiple records into one field in one record. You might be able to use a query against the original table now that I've looked a little bit further at your posted Query. There must be a field that ties each individual to a specific household (many individuals, one household). I've posted a generic sample using Duane Hookom's function. SELECT DISTINCT SomeHouseholdField, Concatenate("SELECT Distinct MemSurName FROM Member WHERE SomeHouseholdField = " & Member.SomeHouseholdField," & ") as NameList FROM Member Duane Hookom http://www.rogersaccesslibrary.com/f...sts.asp?TID=16 Allen Browne http://allenbrowne.com/func-concat.html The Access Web http://www.mvps.org/access/modules/mdl0004.htm John Spencer Access MVP 2002-2005, 2007-2010 The Hilltop Institute University of Maryland Baltimore County |
|
Phil wrote: I have construced a string of people's surname who live in the same house Field name is XFirstSN E.G. Blackburn, Blackburn, Blackburn, Blackburn, Blackburn, Brooke, Brooke, Brooke, Edwards, Brooke, Brooke, Chalmers, Goodwin, Douglas, Allott, Douglas, Douglas, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, Rossi, I want to reduce it to the basic names E.G Blackburn Brooke & Edwards Chalmers & Goodwin Douglas & Allott Rossi FirstSN: [Member]![MemSurName] & IIf([Member_1]![MemSurName]>"" And [Member_1]![MemSurName]<>[Member]![MemSurName]," & " & [Member_1]![MemSurName]) & IIf([Member_2]![MemSurName]>"" And [Member_2]![MemSurName]<>[Member]![MemSurName]," & " & [Member_2]![MemSurName]) & IIf([Member_3]![MemSurName]>"" And [Member_3]![MemSurName]<>[Member]![MemSurName]," & " & [Member_3]![MemSurName]) & IIf([Member_4]![MemSurName]>"" And [Member_4]![MemSurName]<> [Member]![MemSurName]," & " & [Member_4]![MemSurName]) & IIf([Member_5]![MemSurName]>"" And [Member_5]![MemSurName]<>[Member]![MemSurName]," & " & [Member_5]![MemSurName]) & IIf([Member_6]![MemSurName]>"" And [Member_6]![MemSurName]<>[Member]![MemSurName]," & " & [Member_6]![MemSurName]) & IIf ([Member_7]![MemSurName]>"" And [Member_7]![MemSurName]<>[Member]![MemSurName]," & " & [Member_7]![MemSurName]) & IIf([Member_8]![MemSurName]>"" And [Member_8]![MemSurName]<>[Member]![MemSurName]," & " & [Member_8]![MemSurName]) This horrendoud IIf clause produces the right result, but I suspect it only works for 2 names The number of Member tables (Member to Member_8) is determined by the maximum number of people living at 1 address so this is variable. If instead of the current maximum of 9 people, it drops to say 8, the IIf clause will fail because thee won't be a Member_8 Incidenly, this is the query that is the source of the query that has the IIf clause. I suspext that as this is based on a crosstab query, "XAllNames", I am going to have to create it on the fly. SELECT Member.MemSurName, Member.MemFirstName, Member.MemTitle, Member.MemTitleOption, Member_1.MemSurName, Member_1.MemFirstName, Member_1.MemTitle, Member_1.MemTitleOption, Member_2.MemSurName, Member_2.MemFirstName, Member_2.MemTitle, Member_2.MemTitleOption, Member_3.MemSurName, Member_3.MemFirstName, Member_3.MemTitle, Member_3.MemTitleOption, Member_4.MemSurName, Member_4.MemFirstName, Member_4.MemTitle, Member_4.MemTitleOption, Member_5.MemSurName, Member_5.MemFirstName, Member_5.MemTitle, Member_5.MemTitleOption, Member_6.MemSurName, Member_6.MemFirstName, Member_6.MemTitle, Member_6.MemTitleOption, Member_7.MemSurName, Member_7.MemFirstName, Member_7.MemTitle, Member_7.MemTitleOption, Member_8.MemSurName, Member_8.MemFirstName, Member_8.MemTitle, Member_8.MemTitleOption FROM Member AS Member_8 RIGHT JOIN ((((((((XAllNames LEFT JOIN Member ON XAllNames.[1] = Member.MemberID) LEFT JOIN Member AS Member_1 ON XAllNames.[2] = Member_1.MemberID) LEFT JOIN Member AS Member_2 ON XAllNames.[3] = Member_2.MemberID) LEFT JOIN Member AS Member_3 ON XAllNames.[4] = Member_3.MemberID) LEFT JOIN Member AS Member_4 ON XAllNames.[5] = Member_4.MemberID) LEFT JOIN Member AS Member_5 ON XAllNames.[6] = Member_5.MemberID) LEFT JOIN Member AS Member_6 ON XAllNames.[7] = Member_6.MemberID) LEFT JOIN Member AS Member_7 ON XAllNames.[8] = Member_7.MemberID) ON Member_8.MemberID = XAllNames.[9]; Any thoughts please? Phil |
![]() |
| Thread Tools | |
| Display Modes | |
| |