Domanda

Ho tre tabelle pertinenti: parti, partgroup e markupgroup.

Le parti sono semplici.

PartID          artificial primary key
Part            part number
PartGroupID     Foreign key

Dati di esempio:

1   T1000           5
2   wizbang gold    17
3   flux capacitor  2

Partgroup è un grafico diretto aciclico (albero) modellato con un tasto genitore autoctonizzato

PartGroupID     artificial primary key
Description     name of group
ParentID        foreign key linked to PartGroupID
MarkupGroupID   foreign key linked to MarkupGroup

I dati di esempio sembrerebbero così

1   system      null    null
2   component   null    1 
3   software    null    2
4   abc         1       3
5   xyz         1       4
6   123         4       null
7   456         4       null
8   789         5       null
9   a1          6       null
10  b2          6       null
11  c3          7       null
12  d4          7       null
13  e5          8       null  
14  f6          8       null
15  alpha       3       null
16  beta        3       null
17  gamma       3       null

MarkUpGroup deve applicare un fattore di markup a più parto come set.

MarkupGroupID   primary key
MarkupFactor    numeric attribute field

Dati di esempio

1   15
2   20
3   25
4   22

Devo scrivere una query che restituisce l'importo del markup appropriato per ciascuna parte nella tabella delle parti. Non c'è mai un caso in cui più di un markup può applicarsi a una parte. Devo ricorrere al grafico per trovare il markup e non lo saprò al momento della query di quanti livelli ho bisogno per ricorrere a trovare un markup non nullo.

Non c'è mai un caso in cui una parte incontrerà più di un possibile unire a un margine sulla strada dell'albero, quindi non c'è accumulazione che deve essere fatto.

Il T1000 è di tipo XYZ, che ha una chiave straniera per un margingroup, quindi possiamo unirci e ottenere un valore. Ha anche un genitore, ma è irrilevante poiché abbiamo il valore di cui abbiamo bisogno.

Wizbang Gold è un software gamma-group, che non ha una chiave straniera, ma il software del nodo principale lo fa e dovremmo restituirlo.

Un condensatore di flusso è un componente e ha una chiave straniera diretta per un roup di marging. Restituire quel valore.

Quindi i risultati sarebbero:

1   T1000           22
2   wizbang gold    20
3   flux capacitor  15

Sono abbastanza sicuro che avrò bisogno di un CTE ricorsivo e un po 'di sapore di applicazione per ottenere questo, ma al momento il mio cervello non funziona molto bene. Se non fosse per la natura ricorsiva della tavola centrale, questo sarebbe piuttosto semplice. La piattaforma è MS-SQL.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top