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 |
+---+------+------+------+----------------+
Ich vermute, dass "Server" bedeutet "SQL-Server". Sie sollten die Frage mit der Datenbank markieren, die Sie wirklich verwenden. –