其他聚合查询中的聚合子查询

时间:2017-10-26 08:05:54

标签: sql excel vba tsql

我将Microsoft VBA与Excel一起使用,并使用ADODB连接将Sheet视为数据库。 我有一个关于SQL聚合查询的问题,它也使用聚合子查询。问题是我不能像这样使用它,因为它会抛出错误,我不知道如何改变它

SQL查询:

Select inv.[Region], inv.[Org Name], inv.[Bill To Customer Number], inv.[Bill To Customer Name], 
SUM(inv.[AR Global Total Amount]) as "Amount Invoiced", 
COUNT(pay.[Sales Invoice Number]) as "Count Invoices", 
SUM(inv.[AR Global Total Amount]*(inv.[Payment Due Fiscal Date]-inv.[Invoiced Fiscal Date])) as "Sum of Terms Mult", 
SUM(inv.[AR Global Total Amount]*(pay.GL_Min-inv.[Invoiced Fiscal Date])) as "Sum of Pay Days Mult", 
SUM(inv.[AR Global Total Amount]*(pay.GL_Min-inv.[Payment Due Fiscal Date])) as "Sum of Days Late Mult" 
FROM 
(
    Select * 
    From [Data$] as inv 
    WHERE [AR Transaction Sub Type] IN ('Inv', 'Inv-T')
) a,
(
    Select [Region], [Org Name], [Bill To Customer Number], [Bill To Customer Name], [Sales Invoice Number], Min([GL Fiscal Date]) as GL_Min 
    FROM [Data$] as pay 
    WHERE [AR Transaction Sub Type] IN ('Cash', 'Cash-T') 
    GROUP BY [Region], [Org Name], [Bill To Customer Number], [Bill To Customer Name], [Sales Invoice Number]
) t  

WHERE inv.[Sales Invoice Number] = pay.[Sales Invoice Number] AND inv.[Org Name] = pay.[Org Name] AND inv.[AR Global Total Amount]>0 
GROUP BY inv.[Region], inv.[Org Name], inv.[Bill To Customer Number], inv.[Bill To Customer Name] 
ORDER BY SUM(inv.[AR Global Total Amount]) DESC

问题在于第二个子查询,即我尝试捕获最小日期的那个。

有人能指出我正确的语法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的查询似乎正确,但子查询别名除外。你能试试吗?

Select inv.[Region], inv.[Org Name], inv.[Bill To Customer Number], inv.[Bill To Customer Name], 
SUM(inv.[AR Global Total Amount]) as "Amount Invoiced", 
COUNT(pay.[Sales Invoice Number]) as "Count Invoices", 
SUM(inv.[AR Global Total Amount]*(inv.[Payment Due Fiscal Date]-inv.[Invoiced Fiscal Date])) as "Sum of Terms Mult", 
SUM(inv.[AR Global Total Amount]*(pay.GL_Min-inv.[Invoiced Fiscal Date])) as "Sum of Pay Days Mult", 
SUM(inv.[AR Global Total Amount]*(pay.GL_Min-inv.[Payment Due Fiscal Date])) as "Sum of Days Late Mult" 
FROM 
(
    Select * 
    From [Data$] as inv 
    WHERE [AR Transaction Sub Type] IN ('Inv', 'Inv-T')
) inv,
(
    Select [Region], [Org Name], [Bill To Customer Number], [Bill To Customer Name], [Sales Invoice Number], Min([GL Fiscal Date]) as GL_Min 
    FROM [Data$] as pay 
    WHERE [AR Transaction Sub Type] IN ('Cash', 'Cash-T') 
    GROUP BY [Region], [Org Name], [Bill To Customer Number], [Bill To Customer Name], [Sales Invoice Number]
) pay  

WHERE inv.[Sales Invoice Number] = pay.[Sales Invoice Number] AND inv.[Org Name] = pay.[Org Name] AND inv.[AR Global Total Amount]>0 
GROUP BY inv.[Region], inv.[Org Name], inv.[Bill To Customer Number], inv.[Bill To Customer Name] 
ORDER BY SUM(inv.[AR Global Total Amount]) DESC
相关问题