Addie Baker
asked on
Need to Query Data in Access Database to find matching numbers and put in new column
I have a table that contains the following
JD
OEMPartNumber
OEMDescription
OEMSubNumber1
OEMSubNumber2
OEMSubNumber3
OEMSubNumber4
OEMSubNumber2, 3 and 4 are all empty. I need to fill those columns with results from the query i need.
I used the following sql query to find all records where OEMPartNumber and OEMSubNumber Matched
Here is an example
OEMPartNumber - OEMDescription - OEMSubNumber
AR57112 - USE PN AR82761 - AR82761
AR82761 - USE PN AR88536 - AR88536
AR88536 - Lever
What i need to get that to is
OEMPartNumber - OEMDescription - OEMSubNumber - OEMSubNumber2
AR88536 - Lever - AR82761 - AR57112
The reason for this is because i need to get rid of those duplicate rows that just reference the latest part number.
So any duplicate from that query above needs to be placed in the OEMSubNumber2, 3 or 4 depending on how many.
Make Sense? Is this possibe?
JD
OEMPartNumber
OEMDescription
OEMSubNumber1
OEMSubNumber2
OEMSubNumber3
OEMSubNumber4
OEMSubNumber2, 3 and 4 are all empty. I need to fill those columns with results from the query i need.
I used the following sql query to find all records where OEMPartNumber and OEMSubNumber Matched
SELECT OEMPartNumber FROM JD WHERE OEMPartNumber = OEMSubNumber
UNION SELECT OEMSubNumber FROM JD;
Here is an example
OEMPartNumber - OEMDescription - OEMSubNumber
AR57112 - USE PN AR82761 - AR82761
AR82761 - USE PN AR88536 - AR88536
AR88536 - Lever
What i need to get that to is
OEMPartNumber - OEMDescription - OEMSubNumber - OEMSubNumber2
AR88536 - Lever - AR82761 - AR57112
The reason for this is because i need to get rid of those duplicate rows that just reference the latest part number.
So any duplicate from that query above needs to be placed in the OEMSubNumber2, 3 or 4 depending on how many.
Make Sense? Is this possibe?
ASKER
Thank you so much for the response.
The first query seems to work fine.
But the 2nd query has NO results for OEMSubNumber or OEMSubNumber1
This is my table layout
JD
OEMPartNumber
OEMDescription
OEMSubNumber1
OEMSubNumber2
OEMSubNumber3
OEMSubNumber4
The first query seems to work fine.
But the 2nd query has NO results for OEMSubNumber or OEMSubNumber1
This is my table layout
JD
OEMPartNumber
OEMDescription
OEMSubNumber1
OEMSubNumber2
OEMSubNumber3
OEMSubNumber4
ASKER
Sorry, it sorted those results at the bottom. Let me keep working and see if i can get this completed.
Thanks again, will be back in a moment
Thanks again, will be back in a moment
ASKER
"However, inserting the data will likely create issues down the road as new part number and new substitutions happen - it becomes tricky keeping the table up to date. I recommend not actually inserting the data, but leaving it as a query."
That makes good sense. I will probably do that.
How would the additional query be setup for the next set of sub numbers?
That makes good sense. I will probably do that.
How would the additional query be setup for the next set of sub numbers?
Note that your whole issue here is rooted in the fact that your table is not "Normalized"
(has repeating fields)
If this was normalized, (two related tables), then this all would be easy...
(has repeating fields)
If this was normalized, (two related tables), then this all would be easy...
ASKER
What can I do to normalize it?
I am trying to clean this table of 750,000 part numbers up so it gives back the correct information on my sql database.
http://bakerabilene.com/interchange.aspx
That is where i will use this data. Basically a user inputs a OEM Number (whether it be the main or sub1, 2 etc) and it matches any of those OEM numbers to my Abilene Machine part number.
That is the whole point of this. Based on that can i change anything to make this work better? I have 5 more brands to do this with, IH, AGCO, NH, MF etc...
I am trying to clean this table of 750,000 part numbers up so it gives back the correct information on my sql database.
http://bakerabilene.com/interchange.aspx
That is where i will use this data. Basically a user inputs a OEM Number (whether it be the main or sub1, 2 etc) and it matches any of those OEM numbers to my Abilene Machine part number.
That is the whole point of this. Based on that can i change anything to make this work better? I have 5 more brands to do this with, IH, AGCO, NH, MF etc...
In response to "But the 2nd query has NO results for OEMSubNumber or OEMSubNumber1", Ensure the link is an left join from JDFisrtSubstitution.OEMSub Number to JD.OEMPArtNumber.
ASKER
@0Doc
You seem to be on to something here but i can't seem to wrap my head around how to do it.
the following results
Results
OEMPartNumber OEMDescription OEMSubNumber OEMSubNumber1
AR88536 Lever AR82761 AR88536
OEMSubNumber1 is the same as OEMPartNumber. It should be the AR57112.
I do see that the first query DID retrieve the OEMSubNumber and thats good. But im confused how to get the next one.
The is the example im looking at from my table
OEMPartNumber OEMDescription OEMSubNumber1 OEMSubNumber2
AR57112 USE PN AR82761 AR82761
AR82761 USE PN AR88536 AR88536
AR88536 LEVER
So your first query got the AR82761 to AR88536's Sub Number. But how do i get AR57112 to AR88536's OEMSubNumber2?
You seem to be on to something here but i can't seem to wrap my head around how to do it.
the following results
Results
OEMPartNumber OEMDescription OEMSubNumber OEMSubNumber1
AR88536 Lever AR82761 AR88536
OEMSubNumber1 is the same as OEMPartNumber. It should be the AR57112.
I do see that the first query DID retrieve the OEMSubNumber and thats good. But im confused how to get the next one.
The is the example im looking at from my table
OEMPartNumber OEMDescription OEMSubNumber1 OEMSubNumber2
AR57112 USE PN AR82761 AR82761
AR82761 USE PN AR88536 AR88536
AR88536 LEVER
So your first query got the AR82761 to AR88536's Sub Number. But how do i get AR57112 to AR88536's OEMSubNumber2?
The issue is with the link in your second query. If you want, send me your first and second query SQL code and I should be able to spot the problem.
ASKER
First query
second Query
SELECT JD.OEMPartNumber, JD.OEMDescription, JD_1.OEMPartNumber AS OEMSubNumber
FROM JD LEFT JOIN JD AS JD_1 ON JD.OEMPartNumber = JD_1.OEMSubNumber1
WHERE (((JD.OEMDescription) Not Like "USE PN*"));
second Query
SELECT [DuplicateStep1].OEMPartNumber, [DuplicateStep1].OEMDescription, [DuplicateStep1].OEMSubNumber, JD.OEMSubNumber1
FROM DuplicateStep1 LEFT JOIN JD ON [DuplicateStep1].OEMSubNumber=JD.OEMPartNumber;
I don't see anything obvious. Could you attach a sample of your database with the just the table and two queries?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Im still getting this result.
OEMPartNumber OEMDescription OEMSubNumber OEMSubNumber2
AR88536 LEVER AR82761 AR88536
attached a test
again thank you for taking the time to help me
test.accdb
OEMPartNumber OEMDescription OEMSubNumber OEMSubNumber2
AR88536 LEVER AR82761 AR88536
attached a test
again thank you for taking the time to help me
test.accdb
ASKER
Finally got the right query. Just had to swap some things.
Thanks again!
Thanks again!
SELECT DuplicateStep1.OEMPartNumber, DuplicateStep1.OEMDescription, DuplicateStep1.OEMSubNumber, JD.OEMPartNumber AS OEMSubNumber2
FROM DuplicateStep1 LEFT JOIN JD ON DuplicateStep1.OEMSubNumber = JD.OEMSubNumber1;
ASKER
What would my query look like to get the 2 sub numbers back into the JD table and delete the rows that contain the sub numbers in OEMPartNumber?
I would suggest not getting them back in, but use the query basically like the fully loaded table. However, if you have to insert them back, use an Insert query. Be sure to do a backup the bale first and I would recommend trying this first on a test database. Here is the syntax:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase] SELECT [source.]field1[, field2[, …] FROM tableexpression
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase] SELECT [source.]field1[, field2[, …] FROM tableexpression
ASKER
k, thanks. i will look at both options.
One more thing if you dont mind and i will accept your answer as solution.
This is the sequence im using to get all the sub numbers out
is that right? Im noticing some of the number are duplicated like the one below. Is that because i have not pulled all the subs out OR do i have an error?
OEMPartNumber/OEMDescripti on/OEMSubN umber/OEMS ubNumber2/ OEMSubNumb er3/OEMSub Number4/OE MSubNumber 5
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385 55/RE16926 /AR102278
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385 55/RE16926 /AR102282
One more thing if you dont mind and i will accept your answer as solution.
This is the sequence im using to get all the sub numbers out
SELECT DuplicateStep4.OEMPartNumber, DuplicateStep4.OEMDescription, DuplicateStep4.OEMSubNumber, DuplicateStep4.OEMSubNumber2, DuplicateStep4.OEMSubNumber3, DuplicateStep4.OEMSubNumber4, JD.OEMPartNumber AS OEMSubNumber5
FROM DuplicateStep4 LEFT JOIN JD ON DuplicateStep4.OEMSubNumber4 = JD.OEMSubNumber1;
is that right? Im noticing some of the number are duplicated like the one below. Is that because i have not pulled all the subs out OR do i have an error?
OEMPartNumber/OEMDescripti
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385
It looks like the duplicate is coming from the data. Check to see if RE16926 has two substitue parts AR102278 (from the first line) and AR102282 (from the second line).
As a followup, what do you need the queries to show in that situation?
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385 55/RE16926 /AR102278
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385 55/RE16926 /AR102282
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385
ASKER
i would like to see
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385 55/RE16926 /AR102278/ AR102282
RE524752/ENGINE OVERHAUL KIT/RE501569/RE38556/RE385
The nuance that I wasn't aware of is that there can be more than one OEMPart replaced by the same OEMSub. That is what is causing the duplication. The only way I can think of to handle this is to create a VB script to extract the substitute parts and put the results into a new table. Unfortunately, I do not have the time to volunteer to do that. Sorry,
0doc
0doc
Here is some sample code. I used table name of JD and the first query I called JDFirstSubstitution. The names might not make sense, but hopefully the code will help get you what you need.
JDFirstSubstitution (list non-substitute parts with first substitution)
SELECT JD.OEMPartNumber, JD.OEMDescription, JD_1.OEMPartNumber AS OEMSubNumber
FROM JD LEFT JOIN JD AS JD_1 ON JD.OEMPartNumber = JD_1.OEMSubNumber1
WHERE (((JD.OEMDescription) Not Like "USE PN*"));
Results:
OEMPartNumber OEMDescription OEMSubNumber
AR88536 Lever AR82761
JDSecondSubstitution (adds parts that are the first substitution)
SELECT [JDFirstSubstitution].OEMP
FROM JDFirstSubstitution LEFT JOIN JD ON [JDFirstSubstitution].OEMS
Results
OEMPartNumber OEMDescription OEMSubNumber OEMSubNumber1
AR88536 Lever AR82761 AR88536
You can build more levels of substitutions with additional queries.
To finish up, create an insert query to insert the sub part numbers. However, inserting the data will likely create issues down the road as new part number and new substitutions happen - it becomes tricky keeping the table up to date. I recommend not actually inserting the data, but leaving it as a query.
I hope that helps,
0doc