Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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_Sql Server 2008 - Fatal编程技术网

SQL查询中的多个联接

SQL查询中的多个联接,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,表a和B之间以及表B和C之间存在一对多关系。我需要列出表B中的所有记录,以及表a中的父记录,以及C中特定字段的sum()。我如何才能做到这一点 我认为这是类似于: SELECT A.fldlist, B.fldlist, SUM(C.field) FROM A INNER JOIN B ON A.key = b.FK LEFT OUTER JOIN C on B.key = C.FK GROUP BY B.field 有什么想法吗?非常感谢…

表a和B之间以及表B和C之间存在一对多关系。我需要列出表B中的所有记录,以及表a中的父记录,以及C中特定字段的sum()。我如何才能做到这一点

我认为这是类似于:

SELECT A.fldlist, 
       B.fldlist, 
       SUM(C.field)
  FROM A 
  INNER JOIN B ON A.key = b.FK 
  LEFT OUTER JOIN C on B.key = C.FK
  GROUP BY B.field

有什么想法吗?非常感谢…

关闭,但您需要按所选内容中的所有非聚合列进行分组

SELECT A.fldlist, 
       B.fldlist, 
       SUM(C.field)
  FROM A 
  INNER JOIN B ON A.key = b.FK 
  LEFT OUTER JOIN C on B.key = C.FK
  GROUP BY A.fldlist, B.fldlist

如果要按A和B中的所有字段分组,则始终可以这样做

With tmp as
(
   SELECT c.FK, SUM(C.field) as field
   FROM C
   GROUP BY c.FK
)
SELECT A.*, B.*, tmp.FK, tmp.field
FROM   A 
       INNER JOIN B ON A.key = b.FK
       LEFT OUTER JOIN tmp ON b.key = tmp.FK

您在分组中缺少
a.fldlist
,否则看起来很好。谢谢Joe。如果我的字段列表很长怎么办?在本例中,实际上是表A和表B中的所有字段。您需要根据选择列表中不属于“sum”之类聚合函数的所有字段进行分组。@Kim:您已经找到了clyc对您的问题的答案。谢谢clyc。但是,如何将x“设置”为值?我尝试将其逐字插入select子句中,第一次可以这样做,但第二次不行……x是别名,所以您没有将其设置为值。您始终可以将x重命名为tmpThanks clyc。这太棒了。我认为Kim对x/tmp的一些困惑可能是因为您在主选项中引用了
c.FK,c.field
,它应该在
tmp.FK,tmp.field