sql - Excel VBA SQL UNION SUM 对具有不同列名的表进行 GROUP BY
问题描述
我有两个表,列名不同,如下:
表订单: 到期日、付款、汇率
表格发票: 日期、小计、汇率
我想要以下结果表: 年、月、总计
其中两个表在日期 + 月份是 UNIONED ALL,而 Total 是两个表中所有行的总和。
我的伪 SQL 如下所示:
SELECT YearID, MonthID, SUM(Amount) FROM (
SELECT YEAR(ORDREC.[Due Date]) as YearID, MONTH(ORDREC.[Due Date]) as MonthID, SUM(ORDREC.[Pay] * ORDREC.[Exchange Rate]) as Amount
FROM orders-table AS ORDREC
WHERE ...
UNION ALL
SELECT YEAR(INV.[Date]) as YearID, MONTH(INV.[Date]) as MonthID, SUM(INV.[Subtotal] * INV.[Exchange Rate]) as Amount
FROM invoices-table AS INV
WHERE ...
) x GROUP BY YearID, MonthID
我在 GROUP BY 上失败了,因为使用 ALIASES(错误说不在聚合函数中使用 YEAR(ORDREC.[Due Date])),但我必须使用别名,因为两个表中的列名不同。关于如何在单个 SQL 查询中实现这一点的任何建议?
Windows 10 上的 Excel 2016 提供程序=Microsoft.Jet.OLEDB.4.0;
解决方案
当您使用聚合函数GROUP BY
时,您需要在子句中添加非聚合列。
您在查询中使用SUM
聚合函数,需要在两个查询中的子句中UNION ALL
添加非聚合列。GROUP BY
SELECT YearID, MonthID, SUM(Amount) FROM (
SELECT YEAR(ORDREC.[Due Date]) as YearID, MONTH(ORDREC.[Due Date]) as MonthID, SUM(ORDREC.[Pay] * ORDREC.[Exchange Rate]) as Amount
FROM orders-table AS ORDREC
WHERE ...
GROUP BY YEAR(ORDREC.[Due Date]),MONTH(ORDREC.[Due Date])
UNION ALL
SELECT YEAR(INV.[Date]) as YearID, MONTH(INV.[Date]) as MonthID, SUM(INV.[Subtotal] * INV.[Exchange Rate]) as Amount
FROM invoices-table AS INV
WHERE ...
GROUP BY YEAR(INV.[Date]),MONTH(INV.[Date])
) x GROUP BY YearID, MonthID
如果我理解正确,您可以使用它然后执行SUM
聚合函数,我认为错误会消失。
SELECT YearID, MonthID, SUM(Amount) FROM (
SELECT YEAR(ORDREC.[Due Date]) as YearID, MONTH(ORDREC.[Due Date]) as MonthID, (ORDREC.[Pay] * ORDREC.[Exchange Rate]) as Amount
FROM orders-table AS ORDREC
WHERE ...
UNION ALL
SELECT YEAR(INV.[Date]) as YearID, MONTH(INV.[Date]) as MonthID, (INV.[Subtotal] * INV.[Exchange Rate]) as Amount
FROM invoices-table AS INV
WHERE ...
) x GROUP BY YearID, MonthID
推荐阅读
- flutter - 在变量完全初始化之前调用 Flutter build 方法,这会导致应用程序崩溃
- android - 传递 ViewModel 的 MutableLiveData 的值
- google-chrome - 无法在 Ubuntu 上安装谷歌浏览器
- c# - 自动将 Log 语句添加到方法开始和方法结束
- python - Keyerror:添加此行期间的 ID df4 = pd.read_csv('../input/riadd-dataset/RFMiD_Training_Labels.csv',sep='\t')
- python - 在 Python 中移动值
- php - (1/1) ErrorException Trying to get property 'id' of non-object
- android - 有没有办法让编译器相信 @NonNull 变量在 Kotlin 中实际上是可空的?
- arrays - 在 Rails 中创建一系列月份和年份
- c - 从c中的文件中读取值