我有一个视图,其中包含来自不同表的数据。主要字段是BillNo,ITEM_FEE,GroupNo。实际上,我需要通过传递groupNo来计算总折扣。折扣计算基于按BillNo(单个Bill no可以有多个输入)的金额组的分数。如果单个BillNo有多个交易,则如果ITEM_FEE的总和的小数部分大于0,并且如果只有单个交易并且ITEM_FEE的小数部分大于0,则计算折扣,则小数部分将被视为折扣。 我已经准备好脚本,并且可以获得特定组的总折扣。
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分钟才能得到结果。
如果可能,请帮助我更快地找到结果。
答案 0 :(得分:0)
谢谢您的所有帮助和支持,因为我已经按BillNo计算了ITEM_FEE组的小数部分之和,所以不需要检查是否大于0。下面的查询在不到10秒的时间内给了我所需的输出量
select sum(discount) from
(select sum((ITEM_FEE)%1) discount from view_BI_Sales
where groupno=3051
group by BillNo )temp
答案 1 :(得分:0)
如果我的理解正确,则您不需要JOIN
。这可能有助于提高性能:
SELECT SUM(disc) as Discount
FROM (SELECT (CASE WHEN SUM(item_fee % 1) > 0
THEN SUM(item_fee % 1)
END) as disc
FROM view_bi_sales VBS
WHERE groupno = @GroupNo
GROUP BY billno
) vbs;