在连接两个表之前对sql进行分组

6za6bjd0  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(372)

我有一个表,我想从另一个事务表中获得一个附加值,因此关系目前是多对多。因此,我想先按事务表分组,然后将两个表以表1为主的左连接方式连接起来。我一直在寻找解决办法,但还没有找到。
表1:

SELECT 
       [Job No_]
      ,[Document Type]
      ,[No_]
      ,[Document No_]
      ,[Version]
      ,[Shipment Date]
  FROM [XX].[dbo].[XX]

表2:

SELECT 
       [Document No_]
      ,SUM([Amount]) AS [Amount]
  FROM [XX].[dbo].[YY]

  GROUP BY [Document No_]

参见示例

mbskvtky

mbskvtky1#

根据给定的详细信息(如果我答对了问题),您可以使用以下方法加入表,而不会产生任何问题:

SELECT 
       [Job No_]
      ,[Document Type]
      ,[No_]
      ,[Document No_]
      ,[Version]
      ,[Shipment Date]
      ,X.Amount
  FROM [XX].[dbo].[XX] MST
  LEFT JOIN (SELECT [Document No_], SUM([Amount]) AS [Amount] 
             FROM [XX].[dbo].[YY] GROUP BY [Document No_])X 
                --ON X.[Document No_] = MST.[Document No_] --commented as per the image
                ON X.[Document No_] = MST.[No_]
z8dt9xmd

z8dt9xmd2#

一种方便且性能良好的方法是使用相关子查询或 cross apply :

select xx.*,
       (select coalesce(sum(amount), 0)
        from [XX].[dbo].[YY] yy
        where yy.[Document No_] = xx.[Document No_]
       ) as amount
from [XX].[dbo].[XX] xx;

特别是,这可以利用 yy([Document No_], amount) . 另外,如果您添加 where 对于外部查询,这可能比预聚合更有效。

相关问题