【发布时间】:2019-02-05 20:00:36
【问题描述】:
我有一个视图包含来自不同表的数据。主要字段为 BillNo、ITEM_FEE、GroupNo。实际上我需要通过 groupNo 来计算总折扣。折扣计算基于BillNo(单个Bill no 可以有多个条目)的金额组的分数。如果单个BillNo有多个交易,则如果ITEM_FEE总和的小数部分大于0,则计算折扣,如果只有单个交易且ITEM_FEE的小数部分大于0,则小数部分将被视为折扣. 我已经准备好了脚本,并且我正在获得特定 groupNo 的全部折扣。
declare @GroupNo as nvarchar(100)
set @GroupNo='3051'
SELECT Sum(disc) Discount
FROM --sum(ITEM_FEE) TotalAmoiunt,
(SELECT (SELECT CASE
WHEN ( Sum(item_fee) )%1 > 0 THEN Sum(( item_fee )%1)
END
FROM view_bi_sales VBS
WHERE VBS.billno = VB.billno
GROUP BY billno) Disc
FROM view_bi_sales VB
WHERE groupno = @GroupNo)temp
问题是需要将近 2 分钟才能得到结果。
如果可能,请帮助我更快地找到结果。
【问题讨论】:
-
这么多的聚合也就不足为奇了。也许您应该提供示例数据和预期输出,以便我们可以改变您的查询
-
你能发布你的视图
view_bi_sales的定义吗?我怀疑您上面的查询是根本问题,它更有可能是底层视图的问题。 -
您能否提供一些示例数据和您的预期输出
-
在总和上做
% 1有什么意义? -
我觉得相关子查询最好由窗口聚合函数处理。但是,如果没有样本数据和结果,很难确定。
标签: sql sql-server optimization