Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-具有左外部联接的一对多联接_Sql_Sql Server_Join_Sql Server 2008 R2 - Fatal编程技术网

SQL-具有左外部联接的一对多联接

SQL-具有左外部联接的一对多联接,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(

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(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的分组,谢谢您的帮助