SQL MS Access 的嵌套子查询

问题描述

SELECT [doc type],[customer number],COUNT([customer number]) As CountCustomerNumber,SUM([SumOpenAmount]) As TotalOpenAmount          
FROM 
      (SELECT d.[customer number] & d.[membership number] AS CustMemb,d.[customer number],agg.[doc type],SUM(agg.[TotalSubOpenAmount]) AS SumOpenAmount
        FROM  (SELECT [doc type],SUM([open amount]) AS TotalSubOpenAmount
               FROM   data
               WHERE  [doc type] = 'RU' 
               GROUP BY [doc type],[customer number]
              ) agg
        INNER JOIN [data] d                                   
           ON  d.[customer number] = agg.[customer number]
        GROUP  BY d.[customer number] & d.[membership number],agg.[doc type]
      ) AS sub
GROUP  BY [doc type],[customer number]
HAVING COUNT([customer number]) = 1

我需要添加

对未结金额 > 0 的未结金额求和,然后对未结金额

解决方法

尝试条件求和:

SELECT [doc type],[customer number],COUNT([customer number]) As CountCustomerNumber,SUM(IIF([open_amount]>0,[open_amount],0)) AS sum_open_amount_pos,SUM(IIF([open_amount]<0,0)) As sum_open_amount_neg         
FROM 
      (SELECT d.[customer number] & d.[membership number] AS CustMemb,d.[customer number],agg.[doc type],SUM(agg.[TotalSubOpenAmount]) AS SumOpenAmount
        FROM  (SELECT [doc type],SUM([open amount]) AS TotalSubOpenAmount
               FROM   data
               WHERE  [doc type] = 'RU' 
               GROUP BY [doc type],[customer number]
              ) agg
        INNER JOIN [data] d                                   
           ON  d.[customer number] = agg.[customer number]
        GROUP  BY d.[customer number] & d.[membership number],agg.[doc type]
      ) AS sub
GROUP  BY [doc type],[customer number]
HAVING COUNT([customer number]) = 1

您需要先获取未结金额字段。

SELECT [doc type],0)) As sum_open_amount_neg         
FROM 
      (
-- This is the part in which the field open_amount should be fetched.
) AS sub
GROUP  BY [doc type],[customer number]
HAVING COUNT([customer number]) = 1