找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 6380|回复: 7

[求助] 请教一段SQL通过U8的UAP平台制作一个材料成本报表

[复制链接]
发表于 2014-9-9 10:20:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
请教一段SQL,通过U8的UAP平台制作一个报表
想利用物料清单简单查询某一母件的所有子件材料成本汇总值作为成品的“计划价成本”
即有一个报表可以查询所有成品的“材料成本”
BOM可能有4到5层,子件材料成本取值来源:存货档案中的最新成本、参考成本、存货核算里的明细账
取值优先顺序:存货核算里的明细账、最新成本、参考成本
谢谢!
 楼主| 发表于 2014-9-9 15:31:51 | 显示全部楼层
if object_id('tempdb..#SSK_CB') is not null  drop table #SSK_CB
--declare @x int set @x=1;
declare @ID varchar(50)  set @ID ='19010011';  --'物料编码
with t as
(
        select 1 as Level ,* from (
                                                                SELECT     dbo.v_bom_parent_rpt.InvCode AS mjbm, b.cInvName AS mjmc, b.cInvStd AS mjgg,
                                                                                                          dbo.v_bom_opcomponent_rpt.BaseQtyN AS jbyl, dbo.v_bom_opcomponent_rpt.BaseQtyD AS jcyl, dbo.v_bom_opcomponent_rpt.InvCode AS zjbm,
                                                                                                          a.cInvName AS zjmc, a.cInvStd AS zjgg
                                                                FROM         dbo.v_bom_parent_rpt INNER JOIN
                                                                                                          dbo.v_bom_opcomponent_rpt ON dbo.v_bom_parent_rpt.BomId = dbo.v_bom_opcomponent_rpt.BomId INNER JOIN
                                                                                                          dbo.Inventory AS a ON dbo.v_bom_opcomponent_rpt.InvCode = a.cInvCode INNER JOIN
                                                                                                          dbo.Inventory AS b ON dbo.v_bom_parent_rpt.InvCode = b.cInvCode
                                                        ) as ssk_wlqd
         WHERE MJBM= @id
union all
        SELECT b2.[Level] + 1,B1.*  from (
                                                                        SELECT  dbo.v_bom_parent_rpt.InvCode AS mjbm, b.cInvName AS mjmc, b.cInvStd AS mjgg,
                                                                                                                  dbo.v_bom_opcomponent_rpt.BaseQtyN AS jbyl, dbo.v_bom_opcomponent_rpt.BaseQtyD AS jcyl, dbo.v_bom_opcomponent_rpt.InvCode AS zjbm,
                                                                                                                  a.cInvName AS zjmc, a.cInvStd AS zjgg
                                                                        FROM   dbo.v_bom_parent_rpt
                                                                                                INNER JOIN   dbo.v_bom_opcomponent_rpt ON dbo.v_bom_parent_rpt.BomId = dbo.v_bom_opcomponent_rpt.BomId
                                                                                                INNER JOIN   dbo.Inventory AS a ON dbo.v_bom_opcomponent_rpt.InvCode = a.cInvCode
                                                                                                INNER JOIN   dbo.Inventory AS b ON dbo.v_bom_parent_rpt.InvCode = b.cInvCode
                                                                        ) as   B1 join T AS B2 ON  B1.mjbm=B2.zjbm
)

select t_4.*,t_3.iInvSPrice as dj into #SSK_CB from
(
        SELECT [Level] ,mjbm ,mjmc ,mjgg,jbyl,jcyl,zjbm,zjmc,zjgg  
                FROM T   
)as t_4
---------------------------------------------------------------------
left join
(
  select  distinct zjbm,iInvSPrice from ( SELECT * FROM T  where  zjbm not in (select mjbm from t ))
        as t_2 left join
                 (   select cInvCode ,iInvSPrice  from inventory  )
        as t_1 on t_2.zjbm=t_1.cinvcode
) as t_3 on t_3.zjbm=t_4.zjbm


declare @MAX int
set @MAX=(SELECT MAX([LEVEL]) FROM #SSK_CB)

while @MAX >=1
begin
        update #SSK_CB set dj=SS.JBDJ
        FROM #SSK_CB,
        (
        SELECT mjbm, isnull(SUM((jbyl/jcyl)*dj),0) AS JBDJ from
        (SELECT  distinct * FROM #SSK_CB)as SSK_CB_1 WHERE SSK_CB_1.[Level]=@MAX
        GROUP BY mjbm)AS SS
        WHERE #SSK_CB.Zjbm=SS.mjbm
        select @MAX=@MAX-1
end
select * from #SSK_CB --查询明细
SELECT  Level ,mjbm ,mjmc,mjgg,SUM(dj) 计划成本 FROM #SSK_CB group by  Level ,mjbm ,mjmc,mjgg --查询汇总

点评

这个语法是我一个朋友写的吧。他的临时表命名喜欢用ssk 他的姓  详情 回复 发表于 2014-9-10 11:39

评分

参与人数 1金币 +20 收起 理由
stonys + 20 赞一个!

查看全部评分

回复 点赞 1 拍砖 0

使用道具 举报

发表于 2014-9-9 15:24:52 | 显示全部楼层
物料清单推算都不简单,要一层层的去算
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2014-9-9 15:31:05 | 显示全部楼层
与朋友沟通请教已搞定
回复 点赞 拍砖

使用道具 举报

发表于 2014-9-10 11:39:45 | 显示全部楼层
maxiwen 发表于 2014-9-9 15:31
if object_id('tempdb..#SSK_CB') is not null  drop table #SSK_CB
--declare @x int set @x=1;
declare ...

这个语法是我一个朋友写的吧。他的临时表命名喜欢用ssk 他的姓
回复 点赞 拍砖

使用道具 举报

发表于 2014-9-11 11:18:06 | 显示全部楼层
这个要用到存储过程,不是一两条SQL的事情,膜拜了!
回复 点赞 拍砖

使用道具 举报

发表于 2014-9-13 22:41:18 | 显示全部楼层
发出来的SQl语句要2005以上才能用的,还要循环!
回复 点赞 拍砖

使用道具 举报

发表于 2014-9-15 09:15:25 | 显示全部楼层
一条sql是实现不了的
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-4-27 09:40 , Processed in 0.053140 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表