Всем привет
Есть справочник, несбалансированный древовидный.
Необходимо по этому справочнику собрать факт снизу вверх таким образом, чтобы с листьев факт собирался по транзакциям, а на уровни выше - уже по собранным статьям
Типа:
Статья уровня 1.1 = 55
Статья уровня 1.2.1 сумма 12
Статья уровня 1.2.2 сумма 3
Статья уровня 1.2.3 сумма 5+10 = 15
Статья уровня 1.2 сумма 12 + 3 + 15 = 30
Статья уровня 1 сумма 55 + 30 = 85
Не могу придумать запрос, подскажите направление, пожалуйста :)
Спасибо!
Есть справочник, несбалансированный древовидный.
автор |
---|
ROOT_LEVEL_ID ARTICLE_ID ARTICLE_NAME LEVEL IS_LEAF 1 1. Основной уровень 1 0 0 1 1.1 Статья уровня 1.1 1 1 1 1.2 Статья уровня 1.2 1 0 1 1.2.1 Статья уровня 1.2.1 2 1 1 1.2.2 Статья уровня 1.2.2 2 1 1 1.2.3 Статья уровня 1.2.3 2 1 1 1.3 Статья уровня 1.3 1 1 2 2. Основной уровень 2 0 0 2 2.1 Статья уровня 2.1 1 1 |
IF OBJECT_ID('tempdb..#tArticles') IS NOT NULL DROP TABLE #tArticles; IF OBJECT_ID('tempdb..#tTrans') IS NOT NULL DROP TABLE #tTrans; CREATE TABLE #tArticles( [ROOT_LEVEL_ID] [nvarchar](20) NULL, [ARTICLE_ID] [nvarchar](20) NULL, [ARTICLE_NAME] [nvarchar](100) NULL, [LEVEL] [int] NULL, [IS_LEAF] [int] NULL ) ON [PRIMARY]; CREATE TABLE #tTrans( [ARTICLE_ID] [nvarchar](20) NULL, [AMOUNT] float ) ON [PRIMARY]; INSERT INTO #tArticles (ROOT_LEVEL_ID, [ARTICLE_ID], [ARTICLE_NAME], [LEVEL], [IS_LEAF]) VALUES ('1', '1.', 'Основной уровень 1', 0, 0), ('1', '1.1', 'Статья уровня 1.1', 1, 1), ('1', '1.2', 'Статья уровня 1.2', 1, 0), ('1', '1.2.1', 'Статья уровня 1.2.1', 2, 1), ('1', '1.2.2', 'Статья уровня 1.2.2', 2, 1), ('1', '1.2.3', 'Статья уровня 1.2.3', 2, 1), ('1', '1.3', 'Статья уровня 1.3', 1, 1), ('2', '2.', 'Основной уровень 2', 0, 0), ('2', '2.1', 'Статья уровня 2.1', 1, 1); INSERT INTO #tTrans (ARTICLE_ID, AMOUNT) VALUES ('1.2.1', 12), ('1.2.2', 3), ('1.2.3', 5), ('1.2.3', 10), ('2.1', 100), ('1.1', 55); SELECT * FROM #tArticles ORDER BY ARTICLE_ID; SELECT * FROM #tTrans;
Необходимо по этому справочнику собрать факт снизу вверх таким образом, чтобы с листьев факт собирался по транзакциям, а на уровни выше - уже по собранным статьям
Типа:
Статья уровня 1.1 = 55
Статья уровня 1.2.1 сумма 12
Статья уровня 1.2.2 сумма 3
Статья уровня 1.2.3 сумма 5+10 = 15
Статья уровня 1.2 сумма 12 + 3 + 15 = 30
Статья уровня 1 сумма 55 + 30 = 85
Не могу придумать запрос, подскажите направление, пожалуйста :)
Спасибо!