Sql server 更高效的SQL分配视图-函数会更好吗?

Sql server 更高效的SQL分配视图-函数会更好吗?,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我正在写一个观点,将成本分摊到不同的销售部门,我想知道是否有更好的方法来做到这一点 假设我有一些代码输出这个 Dept Type Oct Nov Dec DeptA SalesA 10000 20000 5000 DeptA SalesB 4000 2000 8200 DeptA SalesC 6000 7000 4000 DeptB SalesA 12000 4000 6333 DeptB Sal

我正在写一个观点,将成本分摊到不同的销售部门,我想知道是否有更好的方法来做到这一点

假设我有一些代码输出这个

Dept    Type    Oct     Nov     Dec
DeptA   SalesA  10000   20000   5000
DeptA   SalesB  4000    2000    8200
DeptA   SalesC  6000    7000    4000
DeptB   SalesA  12000   4000    6333
DeptB   SalesB  8445    3880    4500
DeptB   SalesC  8700    8740    6500
General Costs1  890     5874     138
General Costs2  545      547     320
General Costs3  2674     354     214
我想将“成本1”分摊到各个销售部门,并从“部门”报告“销售B”,就像这样

                   Oct      Nov     Dec
SalesB             4000.00  2000.00 8200.00
Approtioned cost1   152.94   499.59   17.98
..(其中‘分摊成本1’=成本1*(部门销售b/总销售额))

到目前为止,我编写的代码如下所示

select 
Dept,
Type,
[Oct-15],
[Nov-15],
[Dec-15]

from ProfitandLoss
where Type like 'SalesB%'
and Dept like 'DeptA'

union

select
'Apportioned Costs1' as 'Dept',
'' as 'Type',
round(((round((select sum([Oct-15]) from ProfitandLoss where Type = 'Costs1'),2))* (round((select sum([Oct-15]) from ProfitandLoss where Type like 'SalesB%' and Dept like 'DeptA'),2) / round((select sum([Oct-15]) from ProfitandLoss where type like 'Sales%'),2))),2) as 'Oct-15',
round(((round((select sum([Nov-15]) from ProfitandLoss where Type = 'Costs1'),2))* (round((select sum([Nov-15]) from ProfitandLoss where Type like 'SalesB%' and Dept like 'DeptA'),2) / round((select sum([Nov-15]) from ProfitandLoss where type like 'Sales%'),2))),2) as 'Nov-15',
round(((round((select sum([Dec-15]) from ProfitandLoss where Type = 'Costs1'),2))* (round((select sum([Dec-15]) from ProfitandLoss where Type like 'SalesB%' and Dept like 'DeptA'),2) / round((select sum([Dec-15]) from ProfitandLoss where type like 'Sales%'),2))),2) as 'Dec-15'
from ProfitandLoss
由于查询中Select语句的数量,目前运行该语句需要43秒——目前这只适用于一个部门超过三个月的时间。我需要在12个月内运行34个部门-有没有更有效的方法。。一个存储每个部门总销售额百分比的函数,然后我可以在查询中引用它,而不是多次子查询以获取单个数字,这会更快吗


…还假设成本分配不均匀…例如,“Costs2”仅在DeptA.SalesA和DeptB.SalesA之间分配…我需要进行具体的分配,而不是将所有内容除以总数。

DBA警报似乎是数据库设计问题此处所有这些期间列-这是表结构还是
PIVOT
script?您能解释一下“期间列”是什么意思吗您是指月份吗?如果是,则不是。这些是来自包含直接查询的视图。“直接”表示不旋转?因此,有一个存储这些列的表,对吗?正确无数据透视-我有一个表,上面显示了部门、类型和三个月的净销售额-然后我进行子查询,以获得10月份的“总销售额”(例如),以便能够将salesB从deptA除以总销售额,从而得出每个销售团队的百分比。我想知道是否有更有效的方法来获取“总销售额”,而不是每个部门和每个月的子查询?