我有一个主表(项目列表)以及在一个公共字段(RecNum)上连接的几个子表。我需要按列列出所有子表的总计,我不知道该怎么做。这是表格设计的一个示例。每个表中有更多列(我需要从“项目列表”中提取*)但我正在显示列名称和值的示例,以了解要执行的操作。
Project List | RecNum | Project Description | | 6 | Sample description | | 7 | Another sample | WeekA | RecNum | UserName | Day1Reg | Day1OT | Day2Reg | Day2OT | Day3Reg | Day3OT | | 6 | JustMe | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | NotMe | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | JustMe | | | | | | | | 7 | NotMe | | | | | | | WeekB | RecNum | UserName | Day1Reg | Day1OT | Day2Reg | Day2OT | Day3Reg | Day3OT | | 6 | JustMe | 7 | 8 | 1 | 2 | 3 | 4 | | 6 | NotMe | 7 | 8 | 1 | 2 | 3 | 4 | | 7 | JustMe | | | | | | | | 7 | NotMe | | | | | | |
因此,第一个查询应返回两个用户的完整总计,如下所示:
| RecNum | Project Description | sumReg | sumOT | | 6 | Sample description | 40 | 52 | | 7 | Another sample | 0 | 0 |
第二个查询应该返回指定用户的总数(WHERE UserName ='JustMe'),如下所示:
| RecNum | Project Description | sumReg | sumOT | | 6 | Sample description | 20 | 26 | | 7 | Another sample | 0 | 0 |
答案 0 :(得分:2)
具有相同结构的多个并行表通常表明数据库设计不佳。数据应该全部在一个表中,其他列指定周。
但是,您可以使用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
子句或条件聚合,以获得您在任何特定情况下所需的结果。