Stuart McLachlan
stuart at lexacorp.com.pg
Sun Feb 12 21:33:17 CST 2012
HI Thomas, I've just come back and looked at this again. One point struck me - would it be possible to change your table design to: HierID PartID NHA Qty 1 2 1 1 2 3 1 1 3 4 2 1 4 5 2 2 6 5 3 1 7 6 3 1 -- Stuart On 12 Feb 2012 at 9:08, Thomas Ewald wrote: > My database has two main tables (and zillions of others): tblParts stores > the data for every part and assembly, and tblHierarchy stores the structure > of assemblies. I'll give a simplified structure for each table, listing only > what's germane to the problem at hand: > > tblParts > > PartID long (PK) > Weight double (lbs) > UncertCode text > > tblHierarchy > > HierID long (PK) > PartID long (FK) > NHA long (FK) > > NHA = Next Higher Assembly. If parts 2 and 3 are components of assembly 1, > then all three would be listed in tblParts, and tblHierarchy would list 2 > and 3 as PartIDs, each having 1 as its NHA (as in the example below). > > UncertCode lists the code that identifies the level of certainty we > (officially) have in the record's weight. For the purpose of this > discussion, we'll say there are A, E, and R (Actual, Estimate and Roll-up, > respectively). If tblParts shows an R, then the Weight will not be native to > that record, but will be a simple sum (roll-up) of its components' weights. > > What I need is to know what percentage of the total weight is represented by > each UncertCode. Since an "R" just shows data from components, I don't want > its data; OTOH, I do want its components' data (assuming they aren't > roll-ups themselves). > > Let see a simple example. > > tblParts: > > PartID Weight UncertCode > 1 10 R > 2 6 R > 3 4 A > 4 4 E > 5 1 E > 6 3 A > > > tblHierarchy: > > HierID PartID NHA > 1 2 1 > 2 3 1 > 3 4 2 > 4 5 2 > 5 5 2 > 6 5 3 > 7 6 3 > > > Part 1 is the main assembly, and I'm looking for its data; I need the weight > represented by A and E codes. When traversing down the tree, R will just > mean "keep going", while A and E mean "stop here and record the data, then > go back up to the next limb on the tree". Starting at part 1 (in > tblHierarchy) as the NHA, we see it has two parts, 2 and 3. Part 2 is an R > (in tblParts), so we need to go on. We see that parts 4 and 5 are in 2; > they are both E, so we can stop there. Going back to part 1, we now take > part 3. Since it's an A, we can stop there (even if its components' weights > did not add up to its given weight, we would not care). So, in this case, we > have > > A: Part 3 (4 lbs) > E: Part 4 (4 lbs) and 2 of Part 5 (2 x 1 lbs) > > Total weight is 10 lbs, so we find that A represents 4 lbs, or 40%, and E > represents 6 lbs or 60%. > > As I said, this is an easy example. I have 8 uncertainty codes, several > vehicles (corresponding to Part 1 in this example; in other words, several > starting points) about 15 levels and thousands of parts. What would be the > best way to traverse the tree, getting only the non-R data for a vehicle? > > Your help would be very much appreciated. > > Tom Ewald > Detroit Area > > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com >