次の出力に基づいて
祖先レベル、つまり都市/州/国で金額を集計したいと考えています。例: 上記の例では、オーストラリアという国と 2 つの州 (VIC と NSW) があります。VIC 州には 2 つの都市 (メルボルンとベンディゴ) があり、NSW 州には都市がありません。クエリの結果には、正確に同じ数のレコードが表示されますが、祖先レベルでの合計金額が表示されます。以下に示すように、メルボルンは 800、VIC は 1300、オーストラリアは 2500 を表示する必要があります。
hierarchyid の GetAncestor 関数を使用して再帰 CTE を使用してそれを行うことは可能でしょうか?
CREATE TABLE #Test ( EmployeeNode hierarchyid, EmployeeName varchar(50), Location varchar(50), Amount decimal )
ALTER TABLE #Test ADD [レベル] as EmployeeNode.GetLevel()
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/' AS hierarchyid), 'Australia', NULL, NULL)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/' AS hierarchyid), 'VIC', NULL, NULL)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/1/' AS hierarchyid), 'Melbourne', NULL, NULL)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/1/1/' AS hierarchyid), NULL, 'Mary', 300.00)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/1/2/' AS hierarchyid), NULL, 'Timothy', 500.00)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/2/' AS hierarchyid), 'Bendigo', NULL, NULL)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/1/2/1/' AS hierarchyid), NULL, 'Paul', 500.00)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/2/' AS hierarchyid), 'NSW', NULL, NULL)
INSERT INTO #Test (EmployeeNode, Location, EmployeeName, Amount) VALUES (CAST('/0/2/1/' AS hierarchyid), 'NSW', 'Peter', 1200.00)
SELECT t.EmployeeNode.ToString(), t.* FROM #Test t