【发布时间】:2013-09-11 07:06:41
【问题描述】:
我有两张桌子
Name | ID |
--------+---------+
A | 3 |
A | 5 |
B | 1 |
ID | Count |
--------+---------+
1 | 10 |
2 | 50 |
3 | 15 |
6 | 20 |
我想生成一些东西来连接这两个表的 ID 以及聚合不匹配条目的结果
Name | ID | Count
--------+---------+----------
A | 3 | 15
A | 5 | 0 *//(doesn't exists)*
A | others | 80 *//(10 (ID 1) + 50 (ID 2) + 20 (ID 6))*
B | 1 | 10
B | others | 85 *//(50 (ID 2) + 15 (ID 3) + 20 (ID 6))*
到目前为止,我可以获取匹配的项目,但无法获取不匹配的聚合。
我觉得在每个 ID 列表上执行 except 并聚合不匹配的 ID 并不是一个优雅的解决方案。
希望找到更优雅的解决方案。
编辑:
我忘了提到我正在使用SQL server。
oracle 解决方案在我的场景中没有任何用处,但会在类似的场景中为 Oracle 用户提供帮助。
【问题讨论】:
-
在 oracle 和 sql server 的情况下,您可以使用完全外连接来完成。如果是 mysql left join union right join 就可以了。你用的是什么 dbms。
-
@Mani 我不认为这对于单个查询是可行的,他的部分结果需要汇总,而其他部分 - 不汇总。
-
@SvetoslavTsolov。看来他需要对整个结果进行分组。不偏。 sum(count) 按名称分组,id。其中 name 和 id 基于 join 合并
标签: asp.net sql-server linq linq-to-sql join