存储过程计算出错,求指教

SylarZhou 2011-11-14 01:22:16
alter proc [dbo].[Pd_TB_Profit_CP]
(@FDateB datetime,@FDateE datetime,@ssql varchar(8000))
as
set nocount on
select m.FItemName ,sum(FQty) FQty,sum(FDAmount) FDAmount,sum(Fcost) Fcost,sum(FDDHLFee) FDDHLFee,sum(FDHLFee) FDHLFee,
sum( isnull(FDAmount,0)+isnull(FDDHLFee,0)-(isnull(Fcost,0)+isnull(FDHLFee,0))) FZprofit,
sum((isnull(FDAmount,0)+isnull(FDDHLFee,0)-(isnull(Fcost,0)+isnull(FDHLFee,0)))/FQty) FDprofit from
(
select t1.FItemName FItemName,t1.FQty FQty,t1.FDAmount FDAmount,t1.Fcost Fcost,t2.FDDHLFee*(t1.FDWeight/t2.FWeight) FDDHLFee,t2.FDHLFee*(t1.FDWeight/t2.FWeight) FDHLFee,t2.FDate FDate
from SU_Sale_TBStockBillEntry t1 inner join SU_Sale_TBStockBill t2 on t1.fid=t2.fid
) m where FDate >=@FDateB and FDate<=@FDateE
GROUP BY m.FItemName
go
这是一个产品报表用的存储过程 FItemName :产品名称 FQty :销售数量 FDAmount : 销售金额 Fcost : 成本
FDDHLFee : 运费 FDHLFee : 运费成本 FZprofit 总利润 FDprofit 单比利润
现在问题就是 这个单比利润的貌似没有除以销售数量啊
sum((isnull(FDAmount,0)+isnull(FDDHLFee,0)-(isnull(Fcost,0)+isnull(FDHLFee,0)))/FQty) FDprofit
...全文
131 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
SylarZhou 2011-11-14
  • 打赏
  • 举报
回复
最终是因为我思路错误,我本意是根据产品名做报表,但是我的那个单比利润是求的每一个小单子的平均利润然后在 求和了 所以出现了错误
中国风 2011-11-14
  • 打赏
  • 举报
回复
t2.FDHLFee*(t1.FDWeight/t2.FWeight) FDHLFee

紅字部份是換算單位*t2.FDHLFee--這是單位成本
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sylarzhou 的回复:]
引用 6 楼 fredrickhu 的回复:

SQL code
alter proc [dbo].[Pd_TB_Profit_CP]
(@FDateB datetime,@FDateE datetime,@ssql varchar(8000))
as
set nocount on
select m.FItemName ,sum(FQty) FQty,sum(FDAmount) FD……
[/Quote]
上传到CSDN空间 再引用地址。
SylarZhou 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fredrickhu 的回复:]

SQL code
alter proc [dbo].[Pd_TB_Profit_CP]
(@FDateB datetime,@FDateE datetime,@ssql varchar(8000))
as
set nocount on
select m.FItemName ,sum(FQty) FQty,sum(FDAmount) FDAmount,sum(Fcost) Fcost,su……
[/Quote]不知道怎么贴图,这个的执行结果没有变化 毛利润还是跟单比利润是一样的
  • 打赏
  • 举报
回复
计算错误,需要知道数据才知道为什么计算错误。这样只能检查出语法有没有问题
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
你把凡是有除法运算的地方都加个1.0 有可能是小数点精度不够
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
alter proc [dbo].[Pd_TB_Profit_CP]
(@FDateB datetime,@FDateE datetime,@ssql varchar(8000))
as
set nocount on
select m.FItemName ,sum(FQty) FQty,sum(FDAmount) FDAmount,sum(Fcost) Fcost,sum(FDDHLFee) FDDHLFee,sum(FDHLFee) FDHLFee,
sum( isnull(FDAmount,0)+isnull(FDDHLFee,0)-(isnull(Fcost,0)+isnull(FDHLFee,0))) FZprofit,
sum((isnull(FDAmount,0)+isnull(FDDHLFee,0)-(isnull(Fcost,0)+isnull(FDHLFee,0)))*1.0/FQty) FDprofit from
(
select t1.FItemName FItemName,t1.FQty FQty,t1.FDAmount FDAmount,t1.Fcost Fcost,t2.FDDHLFee*(t1.FDWeight*1.0/t2.FWeight) FDDHLFee,t2.FDHLFee*(t1.FDWeight*1.0/t2.FWeight) FDHLFee,t2.FDate FDate
from SU_Sale_TBStockBillEntry t1 inner join SU_Sale_TBStockBill t2 on t1.fid=t2.fid
) m where FDate >=@FDateB and FDate<=@FDateE
GROUP BY m.FItemName
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
是的 估计就是除法计算的问题。
SylarZhou 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fredrickhu 的回复:]

晕 这么看还真看不出问题啊
[/Quote]
还需要什么数据吗?
水族杰纶 2011-11-14
  • 打赏
  • 举报
回复
有个几个是直接/的
不知道楼主是不是要*1.0/
--小F-- 2011-11-14
  • 打赏
  • 举报
回复
晕 这么看还真看不出问题啊
pengxuan 2011-11-14
  • 打赏
  • 举报
回复
太多了,等大版

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧