这里有很多帖子描述了如何进行运行总计,但我面临的情况是,运行总计需要是使用子查询计算的列(这意味着我当前的ORDER BY导致查询失败)
我有一个表格,显示每个时间段的金额,类似这样:
TimePeriod Amount
2022-03-31 396
2022-03-31 16
2022-03-31 84
2021-12-31 842
2021-12-31 57
2021-09-30 652
2021-09-30 25
2021-09-30 173
在我的查询中,我需要找到每个时间段占总数的百分比.我所做的是:
SELECT
TimePeriod,
SUM(Amount) AS 'Total Per Period',
CAST( ROUND( SUM(Amount)/(SELECT SUM(Amount) FROM MyDatabase.MyTable),3) AS DECIMAL(12,3)) AS 'Percentage of Total'
FROM
MyDatabase.MyTable
GROUP BY
TimePeriod
ORDER BY
TimePeriod DESC
这给了我一个正确的输出,如下所示:
TimePeriod Total per Period Percentage of total
2022-03-31 496 0.221
2021-12-31 899 0.400
2021-09-30 850 0.379
我想做的是在"总计百分比"列中添加一个运行总计,类似于:
TimePeriod Total per Period Percentage of total Running total percentage
2022-03-31 496 0.221 0.221
2021-12-31 899 0.400 0.621
2021-09-30 850 0.379 1.000
我试图做的是首先在第一个SELECT子句中添加它,但这不起作用,因为它是一个只存在于我的查询中的列.然后我试着做了一个 Select ,比如:
SELECT
TimePeriod,
'Total Per Period',
'Percentage of Total',
SUM('Percentage of Total') OVER (ORDER BY TimePeriod)
FROM
(SELECT
TimePeriod,
SUM(Amount) AS 'Total Per Period',
CAST( ROUND( SUM(Amount)/(SELECT SUM(Amount) FROM MyDatabase.MyTable),3) AS DECIMAL(12,3)) AS 'Percentage of Total'
FROM
MyDatabase.MyTable
GROUP BY
TimePeriod
ORDER BY
TimePeriod DESC)
这会抛出一个错误,表示子查询中不允许使用最后一个ORDER BY.相反,删除ORDER BY表示语法不正确.我猜问题在于我有一个子查询引用了一个子查询结果,但我不确定如何解决这个问题.我的问题似乎遗漏了什么?