Bom计算问题

aslonglizhi 2014-12-01 11:27:56


各位SQL大神。
以前都不怎么上CSDN,现遇到一个问题,所以注册了一个帐号,还请大家帮忙下
--------------------------------------------------------------------------------------
newid 料号 单位用量 损耗 结果
001 001 2 0.01 40405
001.001 002 4 0.04 168355
001.001.001 003 0.0007 0.02 121
002 004 1 0.1 22223
002.001 005 2 0 44446

------------------------------------------------------------------------------------------
SQL计算公式
CEILING(20000*2/(1-0.01))
CEILIN(CEILING(20000*2/(1-0.01))*4/(1-0.04))
CEILIN(CEILIN(CEILING(20000*2/(1-0.01))*4/(1-0.04))*0.0007/(1-0.02))
CEILING(20000*1/(1-0.1))
CEILIN(CEILING(20000*1/(1-0.1))*2)
----------------------------------------------------------------------
公式说明
如果是第一层 总用量=生产数量(20000)*单位用量/(1-损耗),去掉小数全部入1.
如果不是第一层,总用量=父级生产数量*单位用量/(1-损耗),去掉小数全部入1.


因为CSDN又抽风传不了图片,所以我用文字代替,因为示例数据不好对齐,所有我用颜色区分,谢谢。

...全文
77 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
还在加载中灬 2014-12-01
  • 打赏
  • 举报
回复
不是已经有另外一个贴吗? 还是说还没解决?
;WITH BOM AS(
    SELECT *,CAST(CEILING(单位用量*20000/(1-损耗))AS INT)[结果] FROM TB WHERE CHARINDEX('.',[newid])=0
    UNION ALL
    SELECT T1.*,CAST(CEILING(T1.单位用量*T2.结果/(1-T1.损耗))AS INT)
    FROM TB T1 JOIN BOM T2
        ON T1.[newid]LIKE T2.[newid]+'%'AND LEN(T2.[newid])+4=LEN(T1.[newid])
)
SELECT * FROM BOM
aslonglizhi 2014-12-01
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
不是已经有另外一个贴吗? 还是说还没解决?
;WITH BOM AS(
    SELECT *,CAST(CEILING(单位用量*20000/(1-损耗))AS INT)[结果] FROM TB WHERE CHARINDEX('.',[newid])=0
    UNION ALL
    SELECT T1.*,CAST(CEILING(T1.单位用量*T2.结果/(1-T1.损耗))AS INT)
    FROM TB T1 JOIN BOM T2
        ON T1.[newid]LIKE T2.[newid]+'%'AND LEN(T2.[newid])+4=LEN(T1.[newid])
)
SELECT * FROM BOM
兄弟不好意思,我看错了,已经解决了。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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