我有一个查询,要求在树状结构中选择每个部门的金额。我想显示孩子们各自父母的总金额。
是否可以在不使用游标的情况下将其存档在查询中?
以下是要总结的数据结果集。完整的示例也可以在sqlfiddle http://sqlfiddle.com/#!4/ea0af/1/0.
Results http://sqlfiddle.com/#!4/ea0af/1/0:
| DEPARTMENT_ID | PARENT_DEP_ID | DEPARTMENT | AMOUNT |
|---------------|---------------|----------------|-----------------|
| 1 | 0 | 1 | 0 |
| 7 | 1 | 11 | 0 |
| 34 | 7 | 111 | 0 |
| 120 | 34 | 1111 | 0 |
| 402 | 120 | 111101 | 0 |
| 651 | 402 | 11110101/10000 | 227470.72339635 |
| 651 | 402 | 11110101/10000 | 52255.99610869 |
| 651 | 402 | 11110101/10000 | 4437.15281795 |
| 651 | 402 | 11110101/10000 | 4552.70289465 |
| 651 | 402 | 11110101/10000 | 8510.61790448 |
| 651 | 402 | 11110101/10000 | 8266.08 |
| 651 | 402 | 11110101/10000 | 9968.16 |
| 651 | 402 | 11110101/10000 | 242.58 |
| 403 | 120 | 111102 | 0 | <= this is where i
| 652 | 403 | 11110201/10005 | 120384.7842412 | want to have my
| 652 | 403 | 11110201/10005 | 488733.59476206 | sum from the
| 652 | 403 | 11110201/10005 | 2318.6573888 | child items
| 652 | 403 | 11110201/10005 | 23690.22829273 |
| 652 | 403 | 11110201/10005 | 38321.261680815 |
| 652 | 403 | 11110201/10005 | 6199.56 |
| 652 | 403 | 11110201/10005 | 7476.12 |
| 652 | 403 | 11110201/10005 | 161.92 |
这将获得完整的报告
SELECT t1.DEPARTMENT_ID
, t1.PARENT_DEP_ID
, t1.DEPARTMENT
, Sum(t2.Amount) Amount
FROM TREE_DATA t1
INNER JOIN TREE_DATA t2
ON t1.DEPARTMENT = SUBSTR(t2.DEPARTMENT, 1, LENGTH(t1.DEPARTMENT))
WHERE t1.Amount = 0
GROUP BY t1.DEPARTMENT_ID, t1.PARENT_DEP_ID, t1.DEPARTMENT
UNION ALL
SELECT DEPARTMENT_ID
, PARENT_DEP_ID
, DEPARTMENT
, Amount
FROM TREE_DATA
WHERE Amount > 0
ORDER BY DEPARTMENT
第一个查询通过破解没有金额的部门名称的结构来获取滚动总和,第二个查询获取叶子。
第一个查询无法显示叶子,因为它们将被分组。
我还没有找到任何列组合来获得相同的顺序,叶子似乎是无序的。
SQL小提琴 http://sqlfiddle.com/#!4/ea0af/42 demo
我尝试写一个递归CTE
,但不可能有聚合函数,例如SUM
in it.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)