【发布时间】:2014-01-15 22:00:53
【问题描述】:
我有四个以父子关系构造的表。一个表有一个主键,而其他三个表,否则彼此不相关,将该主键作为外键。也就是说,表 A 有一个称为客户 ID 的主键。表 B、C 和 D 也有客户 ID 和一些其他信息。
我想要实现的是对表 B、C 和 D 的 column2 求和。我已经尝试过:
SELECT dbo.a.primary_key,
SUM(dbo.b.column2) AS Expr1,
SUM(dbo.c.column2) AS Expr2,
SUM(dbo.d.column2) AS Expr3
FROM dbo.a
INNER JOIN dbo.b ON dbo.a.primary_key = dbo.b.column1
INNER JOIN dbo.c ON dbo.a.primary_key = dbo.c.column1
INNER JOIN dbo.d ON dbo.a.primary_key = dbo.d.column1
GROUP BY dbo.a.primary_key
这不返回任何内容。我还尝试了一个返回空值的左外连接。我也尝试了下面的行,这是我真正想要实现的:
SUM(dbo.b.column2) + SUM(dbo.c.column2) + SUM(dbo.d.column2) AS Expr1
这可能归结于糟糕的设计,因为我可以有效地将这三个表合并到一个表中,但相信这样会更整洁。
一旦我解决了这个问题,我想将它扩展为表 B、C 和 D 的第 3 列,以便它们有一个日期字段,它是一个 int 并链接回一个日期表 (E)。我想将表 A、B、C 和 D 同时连接到新创建的 E,按日期和 a.primary_key 分组。这可能吗,还是我需要重新考虑设计?
【问题讨论】:
-
如何将列
JOIN dbo.b.column2加入表中,不应该是表吗? -
一旦你解决了这个问题,请为第二部分做一个很好的例子 - 就像你在这里所做的那样......也许是一个新问题!
-
抱歉错字。我正忙于删除表和列的名称,不小心更改了那个。这仍然没有返回结果
-
如果将其更改为外连接,是否会返回
primary_key值,而只是没有总和? -
是的,安德鲁,这是正确的
标签: sql sql-server database sql-server-2012