【发布时间】:2014-02-06 10:53:20
【问题描述】:
我希望有人可以帮助解决我遇到的这个问题,我正在尝试从以下数据示例中计算出每周平均值:
Practice ID Cost FiscalWeek
1 10.00 1
1 33.00 2
1 55.00 3
1 18.00 4
1 36.00 5
1 24.00 6
13 56.00 1
13 10.00 2
13 24.00 3
13 30.00 4
13 20.00 5
13 18.00 6
我想要的是按练习 ID 进行分组,但计算出每个练习的平均值(其中有 500 多个,而不仅仅是上面的那些),然后每周计算出来,例如在第 1 周将没有平均值,但第 2 周将是第 1 周和第 2 周的平均值,然后第 3 周将是第 1、2 和 3 周的平均值,依此类推。然后,我需要通过练习 ID 和每个会计周显示此信息。
目前我有一些不漂亮的代码,必须有一个更简单的方法,这段代码是:
我将所有数据传递到一个表变量中,然后使用 CTE 我使用案例语句来设置每个单独的星期,例如:
CASE WHEN fiscalweek = 1 THEN cost ELSE 0 END AS [1],
CASE WHEN fiscalweek = 2 THEN cost ELSE 0 END AS [2],
CASE WHEN fiscalweek = 3 THEN cost ELSE 0 END AS [3]
这会将第 1 周的费用等带回它自己的列中,例如1、2、3 等,然后我使用第二个 CTE 对每周的列求和,例如,为了计算第 6 周,我将使用以下代码:
sum([1]) as 'Average Wk 1',
sum([1]+[2])/2 as 'Average Wk 2',
sum([1]+[2]+[3])/3 as 'Average Wk 3',
sum([1]+[2]+[3]+[4])/4 as 'Average Wk 4',
sum([1]+[2]+[3]+[4]+[5])/5 as 'Average Wk 5'
sum([1]+[2]+[3]+[4]+[5]+[6])/6 as 'Average Wk 6'
我已经考虑过在 T-SQL 中准确计算此平均值的各种不同方法,因此我最终可以将其放入 SSRS 中。我曾考虑过使用 While..Loop, Cursor,但没有看到一种简单的方法。
【问题讨论】:
-
我希望所有问题都得到很好的解释和精美的格式!
-
你是说你想运行 avg() 吗?