【发布时间】:2015-10-01 19:19:57
【问题描述】:
我需要将子项的总和添加到父项。子项“childId”与父项“parentId”相同。
在下表中,ParentId '45627' 的总计数为 0。但是,我需要 11。11 是子项总计数的总和。
+----------+---------+-------+------------+
| ParentId | ChildId | Name | TotalCount |
+----------+---------+-------+------------+
| 45627 | 12568 | Test1 | 0 |
| 52678 | 45627 | Test2 | 0 |
| 23123 | 45627 | Test3 | 7 |
| 54312 | 45627 | Test4 | 3 |
| 32123 | 45627 | Test5 | 0 |
| 12111 | 45627 | Test6 | 1 |
| 32122 | 45627 | Test7 | 0 |
| 43123 | 45627 | Test8 | 0 |
+----------+---------+-------+------------+
预期输出:
+----------+---------+-------+------------+
| ParentId | ChildId | Name | TotalCount |
+----------+---------+-------+------------+
| 45627 | 12568 | Test1 | 11 |
| 52678 | 45627 | Test2 | 0 |
| 23123 | 45627 | Test3 | 7 |
| 54312 | 45627 | Test4 | 3 |
| 32123 | 45627 | Test5 | 0 |
| 12111 | 45627 | Test6 | 1 |
| 32122 | 45627 | Test7 | 0 |
| 43123 | 45627 | Test8 | 0 |
+----------+---------+-------+------------+
虽然可以通过self join实现,但是性能太慢了。
有没有其他方法可以更好地获得预期的输出。
我尝试过的查询
SELECT a.parentId
,a.childId
,out1.TotalCount
FROM test a
LEFT JOIN (
SELECT a.parentId
,sum(b.TotalCount) AS TotalCount
FROM test a
INNER JOIN test b ON a.ParentId = b.childId
GROUP BY a.ParentId
) AS out1 ON a.ParentId = out1.ParentId
注意:以上表格为示例。记录数可以是 10,000。
【问题讨论】:
-
显示你尝试了什么。这样我们就可以为您提供其他选项,而不是重复您已经尝试过的选项。
-
只希望它用于 SQL-SERVER 还是任何 RDBMS 都可以?
-
我认为您的 ChildID 和 ParentID 列颠倒了? 45627 看起来像所有这些孩子的父母。但我们可以等待 dna 结果。
-
在写着“ParentId”的地方应该读作“Id”。上面写着“ChildId”的地方应该是“ParentId”。显示。我们。什么。你。有。试过了。
-
每行缩进4个空格,或者只选择文本并按
ctrl-K应用格式代码
标签: sql sql-server