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

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

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

  1. SELECT
  2. [Job No_]
  3. ,[Document Type]
  4. ,[No_]
  5. ,[Document No_]
  6. ,[Version]
  7. ,[Shipment Date]
  8. FROM [XX].[dbo].[XX]

表2:

  1. SELECT
  2. [Document No_]
  3. ,SUM([Amount]) AS [Amount]
  4. FROM [XX].[dbo].[YY]
  5. GROUP BY [Document No_]

参见示例

mbskvtky

mbskvtky1#

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

  1. SELECT
  2. [Job No_]
  3. ,[Document Type]
  4. ,[No_]
  5. ,[Document No_]
  6. ,[Version]
  7. ,[Shipment Date]
  8. ,X.Amount
  9. FROM [XX].[dbo].[XX] MST
  10. LEFT JOIN (SELECT [Document No_], SUM([Amount]) AS [Amount]
  11. FROM [XX].[dbo].[YY] GROUP BY [Document No_])X
  12. --ON X.[Document No_] = MST.[Document No_] --commented as per the image
  13. ON X.[Document No_] = MST.[No_]
z8dt9xmd

z8dt9xmd2#

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

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

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

相关问题