SQL Server: взорвите спецификацию, соединив таблицу с самой собой, чтобы получить младшего ребенка - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу полностью разобрать таблицу спецификации с помощью SQL Server.Таблица находится в обычной базе данных Microsoft SQL Server.Предположим, у меня есть таблица, подобная этой:

enter image description here

Я ищу способ взорвать это, чтобы он перечислял каждый компонент для каждой спецификации в спецификации.колонка.Результирующая таблица будет выглядеть следующим образом:

enter image description here

Обратите внимание, что столбец общего количества должен агрегироваться правильно.Нет предопределенного предела глубины проникновения иерархии.

1 Ответ

0 голосов
/ 27 декабря 2018

SQL Server поддерживает рекурсивные CTE, поэтому вы можете сделать:

with t as (
      select v.*
      from (values ('A', 'C', 2), ('C', 'F', 3), ('A', 'B', 1)) v(bom, component, quantity)
     ),
     cte as (
      select bom as source, bom, component, quantity
      from t
       union all
      select cte.source, t.bom, t.component, cte.quantity * t.quantity
      from cte join
           t
           on cte.component = t.bom
     )
select *
from cte;

Здесь - это скрипта db <>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...