SQL-具有左外部联接的一对多联接
SQL Server 2008 r2 我有两张桌子 表1SQL-具有左外部联接的一对多联接,sql,sql-server,join,sql-server-2008-r2,Sql,Sql Server,Join,Sql Server 2008 R2,SQL Server 2008 r2 我有两张桌子 表1 Col1 Col2 Col3 Col4 123 08 1 1 123 08 1 1 123 08 2 1 表2 Col1 Col2 Col3 123 08 6 表1是主列,因此大多数数据来自此表,它必须是表2的左外部联接,因为表1的值(col1,col2)在表2中并不总是返回值,应该显示为null 我的问题是 SELECT a.Col2, SUM(a.Col3), SUM(
Col1 Col2 Col3 Col4
123 08 1 1
123 08 1 1
123 08 2 1
表2
Col1 Col2 Col3
123 08 6
表1是主列,因此大多数数据来自此表,它必须是表2的左外部联接,因为表1的值(col1,col2)在表2中并不总是返回值,应该显示为null
我的问题是
SELECT
a.Col2,
SUM(a.Col3),
SUM(a.Col4),
SUM(b.Col3)
FROM
Table 1 a
LEFT OUTER JOIN Table2 b
ON a.col1 = b.col1 AND a.col2 = b.col2
GROUP BY a.Col2
这将返回08、4、3、18
我希望这个能返回08,4,3,6
因为表2连接了3行,所以它将b.Col3的总和值增加了三倍
最好的解决方案是什么?请试试这个。如果表2中有两条相同col1和col2的记录,这也会起作用
SELECT
a.Col2,
SUM(a.Col3),
SUM(a.Col4),
MAX(b.Col3) FROM
Table 1 a
LEFT OUTER JOIN (select col1, col2, sum(col3) as col3 from Table2 group by col1, col2) b ON a.col1 = b.col1 AND a.col2 = b.col2
GROUP BY
a.Col2
如果不想在记录之间求和,可以通过以下方式将
b.Col3
添加到组中:
SELECT
a.Col2,
SUM(a.Col3),
SUM(a.Col4),
b.Col3
FROM
Table 1 a
LEFT OUTER JOIN Table2 b
ON a.col1 = b.col1 AND a.col2 = b.col2
GROUP BY a.Col2, b.Col3
如果第四列中的结果不是求和,那么不清楚您想要什么。如果您可以依靠每个组的所有行在该列中具有相同的值(在您的示例中,它们将具有相同的值,但可能不具有不同的数据),并且如果这是您想要的值,则可以使用以下方法:
SELECT
a.Col2,
SUM(a.Col3),
SUM(a.Col4),
MIN(b.Col3)
FROM
Table 1 a
LEFT OUTER JOIN Table2 b
ON a.col1 = b.col1 AND a.col2 = b.col2
GROUP BY a.Col2
当然,您也可以使用
MAX()
而不是MIN()
。这很有效,因为我创建了一个视图并汇总了表2的内容,然后加入了新视图,并使用了Col3的分组,谢谢您的帮助