2017-03-13 1 views
0

Ich habe zwei Tabellen, die Teilenummern sowie die Hierarchie von Baugruppen verfolgen.Finden Sie die übergeordneten und multiplizierten Mengen auf oberster Ebene

Tabelle: Config

ConfigNum AssemblyNum Qty 
1   A  1 
1   B  2 
1   C  2 
2   A  1 
2   C  1 

Tabelle: Unterbaugruppe

SubAssembly PartNum Qty 
A   AA  2 
A   BB  4 
A   CC  2 
A   DD  4 
B   EE  4 
B   FF  8 
AA   AAA 2 

Ich möchte eine flache Version dieser Tabellen erstellen, die die ConfigNum (Top-Level-parent) zeigt mit allen zugehörigen Montage und Teil Nummern für jede ConfigNum in der Config-Tabelle. Die Spalte Config.AssemblyNum entspricht SubAssembly.SubAssembly.

+0

Ich vermute, dass "Server" bedeutet "SQL-Server". Sie sollten die Frage mit der Datenbank markieren, die Sie wirklich verwenden. –

Antwort

0

Für dieses Problem müssen Sie eine rekursive Abfrage verwenden. Tatsächlich denke ich, dass die SubAssembly-Tabelle ein ProductID-Feld außer SubAssembly haben sollte, um das Hauptprodukt, das Baugruppen enthält, leicht zu identifizieren.

Ein ähnliches Beispiel finden Sie in der Dokumentation zu SLQ Server.

Kann es hier ansehen: http://rextester.com/FQYI80157

Ändern Sie die Menge in Config-Tabelle um das Endergebnis zu ändern.

create table #t1 (cfg int, part varchar(10), qty int); 
create table #t2 (part varchar(10), sasm varchar(10), qty int); 
insert into #t1 values (1,'A',2); 
insert into #t2 values ('AA','AAA',2),('A','AA',2),('A','BB',4),('A','CC',2),('A','DD',4); 

WITH cte(sasm, part, qty) 
AS (
    SELECT sasm, part, qty 
    FROM #t2 WHERE part = 'A' 

    UNION ALL 

    SELECT p.sasm, p.part, p.qty * pr.qty 
    FROM cte pr, #t2 p 
    WHERE p.part = pr.sasm 
) 
SELECT #t1.cfg, cte.part, cte.sasm, SUM(cte.qty * COALESCE(#t1.qty,1)) as total_quantity 
FROM cte 
left join #t1 on cte.part = #t1.part 
GROUP BY #t1.cfg, cte.part, cte.sasm; 

Dies ist das Ergebnis:

+---+------+------+------+----------------+ 
| | cfg | part | sasm | total_quantity | 
+---+------+------+------+----------------+ 
| 1 | NULL | AA | AAA |    4 | 
| 2 | 1 | A | AA |    4 | 
| 3 | 1 | A | BB |    8 | 
| 4 | 1 | A | CC |    4 | 
| 5 | 1 | A | DD |    8 | 
+---+------+------+------+----------------+ 
Verwandte Themen