【发布时间】:2013-05-19 10:40:00
【问题描述】:
基于以下输出
我想在祖先级别(即城市/州/国家/地区)汇总金额。例如: 在上面的示例中,我们有国家 Australia 和两个州(VIC 和 NSW)。维多利亚州有两个城市(墨尔本和本迪戈),新南威尔士州没有城市。查询的结果应该显示完全相同数量的记录,但在祖先级别汇总数量。比如说,墨尔本应该显示 800,VIC 应该显示 1300,澳大利亚应该显示 2500,如下所示:
是否有可能使用hierarchyid的GetAncestor函数使用递归CTE来做到这一点?
创建表#Test ( EmployeeNode hierarchyid, 员工姓名 varchar(50), 位置 varchar(50), 金额小数 )
改变表#测试 将 [Level] 添加为 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), '墨尔本', 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
【问题讨论】:
标签: sql-server-2008 tsql common-table-expression hierarchyid