我有一个主表(项目列表)以及在一个公共字段(RecNum)上联接的几个子表。我需要按列获取所有子表的总计,并且不确定如何执行。这是表格设计的示例。每个表中都有更多的列,但是我正在显示列名称和值的示例,以使您了解要做什么。
项目清单
| RecNum |
| 6 |
周A
| RecNum |用户名| Day1Reg | Day1OT | Day2Reg | Day2OT | Day3Reg | Day3OT |
| 6 | JustMe | 1 | 2 | 3 | 4 | 5 | 6 |
| 6 | NotMe | 1 | 2 | 3 | 4 | 5 | 6 |
周B
| RecNum |用户名| Day1Reg | Day1OT | Day2Reg | Day2OT | Day3Reg | Day3OT |
| 6 | JustMe | 7 | 8 | 1 | 2 | 3 | 4 |
| 6 | NotMe | 7 | 8 | 1 | 2 | 3 | 4 |
因此,第一个查询应返回两个用户的完整总计,如下所示:
| sumDay1Reg | sumDay1OT | sumDay2Reg | sumDay2OT | sumDay3Reg | sumDay3OT |
| 16 | 20 | 8 | 12 | 16 | 20 |
第二个查询应仅返回指定用户的总数(WHERE UserName ='JustMe'),如下所示:
| sumDay1Reg | sumDay1OT | sumDay2Reg | sumDay2OT | sumDay3Reg | sumDay3OT |
| 8 | 10 | 4 | 6 | 8 | 10 |
最佳答案
有多个表存储相同类型的数据是一个坏主意。您应该有一个Weeks
表,该表在一周中有一个附加列。
无论如何,处理此表结构的最简单方法是首先合并表:
SELECT SUM(Day1Reg) AS sumDay1Reg,
SUM(Day10T) AS sumDay10T,
...
FROM (SELECT * FROM WeekA
UNION ALL
SELECT * FROM WeekB)
WHERE userName = 'JustMe' -- optional
关于sql - 使用WHERE子句联接多个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28118425/