SQL查询中的多个联接
表a和B之间以及表B和C之间存在一对多关系。我需要列出表B中的所有记录,以及表a中的父记录,以及C中特定字段的sum()。我如何才能做到这一点 我认为这是类似于: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 有什么想法吗?非常感谢…
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