选择主 table 中的所有行并汇总多个详细信息 table 中的列
Selecting all rows in a master table and summing columns in multiple detail tables
我有一个主 table(项目列表)和几个子 table,它们连接在一个公共字段 (RecNum) 上。我需要按列获取所有子 table 的总计,但我不确定该怎么做。这是 table 设计的示例。每个 table 中有更多列(我需要从 "Project List" 中提取 *),但我展示了列名和值的样本以了解要做什么。
项目清单
|记录号 |项目描述 |
| 6 |样品说明 |
| 7 |另一个样本 |
周A
|记录号 |用户名 |第一天注册 |第 1 天 |第二天注册 |第 2 天 |第三天注册 |第 3 天 |
| 6 |就我| 1 | 2 | 3 | 4 | 5 | 6 |
| 6 |不是我 | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 |就我| | | | | | |
| 7 |不是我 | | | | | | |
周B
|记录号 |用户名 |第一天注册 |第 1 天 |第二天注册 |第 2 天 |第三天注册 |第 3 天 |
| 6 |就我| 7 | 8 | 1 | 2 | 3 | 4 |
| 6 |不是我 | 7 | 8 | 1 | 2 | 3 | 4 |
| 7 |就我| | | | | | |
| 7 |不是我 | | | | | | |
所以第一个查询应该 return 两个用户的完整总数,如下所示:
|记录号 |项目描述 |总和|总和 |
| 6 |样品说明 | 40 | 52 |
| 7 |另一个样本 | 0 | 0 |
第二个查询应该 return 仅指定用户 (WHERE UserName = 'JustMe') 的总数,如下所示:
|记录号 |项目描述 |总和|总和 |
| 6 |样品说明 | 20 | 26 |
| 7 |另一个样本 | 0 | 0 |
具有相同结构的多个并行table通常是数据库设计不佳的标志。数据确实应该全部集中在一个 table 中,附加列指定了星期。
但是,您可以使用 union all
将数据整合在一起。以下是一个查询示例:
select pl.recNum, pl.ProjectDescription,
sum(Day1Reg + Day2Reg + Day3Reg) as reg,
sum(Day1OT + Day2OT + Day3OT) as ot
from ProjectList pl join
(select * from weekA union all
select * from weekB
) w
on pl.recNum = w.recNum
group by l.recNum, pl.ProjectDescription,;
在实践中,您应该使用 select *
和 union all
。您应该明确列出列。您可以添加适当的 where
子句或条件聚合以在任何特定情况下获得您想要的结果。
我有一个主 table(项目列表)和几个子 table,它们连接在一个公共字段 (RecNum) 上。我需要按列获取所有子 table 的总计,但我不确定该怎么做。这是 table 设计的示例。每个 table 中有更多列(我需要从 "Project List" 中提取 *),但我展示了列名和值的样本以了解要做什么。
项目清单 |记录号 |项目描述 | | 6 |样品说明 | | 7 |另一个样本 | 周A |记录号 |用户名 |第一天注册 |第 1 天 |第二天注册 |第 2 天 |第三天注册 |第 3 天 | | 6 |就我| 1 | 2 | 3 | 4 | 5 | 6 | | 6 |不是我 | 1 | 2 | 3 | 4 | 5 | 6 | | 7 |就我| | | | | | | | 7 |不是我 | | | | | | | 周B |记录号 |用户名 |第一天注册 |第 1 天 |第二天注册 |第 2 天 |第三天注册 |第 3 天 | | 6 |就我| 7 | 8 | 1 | 2 | 3 | 4 | | 6 |不是我 | 7 | 8 | 1 | 2 | 3 | 4 | | 7 |就我| | | | | | | | 7 |不是我 | | | | | | |
所以第一个查询应该 return 两个用户的完整总数,如下所示:
|记录号 |项目描述 |总和|总和 | | 6 |样品说明 | 40 | 52 | | 7 |另一个样本 | 0 | 0 |
第二个查询应该 return 仅指定用户 (WHERE UserName = 'JustMe') 的总数,如下所示:
|记录号 |项目描述 |总和|总和 | | 6 |样品说明 | 20 | 26 | | 7 |另一个样本 | 0 | 0 |
具有相同结构的多个并行table通常是数据库设计不佳的标志。数据确实应该全部集中在一个 table 中,附加列指定了星期。
但是,您可以使用 union all
将数据整合在一起。以下是一个查询示例:
select pl.recNum, pl.ProjectDescription,
sum(Day1Reg + Day2Reg + Day3Reg) as reg,
sum(Day1OT + Day2OT + Day3OT) as ot
from ProjectList pl join
(select * from weekA union all
select * from weekB
) w
on pl.recNum = w.recNum
group by l.recNum, pl.ProjectDescription,;
在实践中,您应该使用 select *
和 union all
。您应该明确列出列。您可以添加适当的 where
子句或条件聚合以在任何特定情况下获得您想要的结果。