この問題では、再帰的なクエリを使用する必要があると思います。実際には、SubAssemblyテーブルには、SubAssembly以外のProductIDフィールドがあり、アセンブリを含む主な製品を簡単に識別できるはずです。
SLQサーバのマニュアルでも同様の例があります。
は、ここでそれを確認することができます:http://rextester.com/FQYI80157
変更コンフィグテーブルの数量は、最終結果を変更します。
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;
これが結果です:
+---+------+------+------+----------------+
| | 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 |
+---+------+------+------+----------------+
私は、 "サーバー" は "SQLサーバ" を意味することを推測しています。実際に使用しているデータベースで質問にタグを付ける必要があります。 –