求大神帮忙看看多对多的求和问题!

F294133033 2018-01-19 09:24:17

求大神帮忙看看多对多的求和问题:
以下是原数据
D60_RKEY PARTS_ORDERED BASE_WO QUAN_SCH
R1 10 B1 5
R1 10 B2 10
R2 20 B3 44
R3 15 B3 44
R4 30 B4 40
R4 30 B5 50
R5 40 B5 50

以下是需要得到的结果:

BASE_WO PARTS_ORDERED QUAN_SCH
B1 10 15 --(10+5)
B2 10 15 --(10+5)
B3 35--(20+15) 44
B4 70--(30+40) 90 --(10+50)
B5 70--(30+40) 90 --(10+50)
...全文
259 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
F294133033 2018-01-19
  • 打赏
  • 举报
回复
B4对应的R4由对应了B5, B5对应R5 所有需要R4+R5 我这个就是多订单投料多工单的预投率算法问题,R4、R5 一起投料,投料的工单 为B4、B5 , 正确的算法就是 (B4+B5-R4-R5)/(R4+R5), 我用B4或B5查到的结果都应该是 (B4+B5-R4-R5)/(R4+R5)。
F294133033 2018-01-19
  • 打赏
  • 举报
回复
B4对应的R4由对应了B5, B5对应R5 所有需要R4+R5 我这个就是多订单投料多工单的预投率算法问题,R4、R5 一起投料,投料的工单 为B4、B5 , 正确的算法就是 (B4+B5-R4-R5)/(R4+R5), 我用B4或B5查到的结果都应该是 (B4+B5-R4-R5)/(R4+R5)。
二月十六 2018-01-19
  • 打赏
  • 举报
回复
B4 70--(30+40) 这个30+40是什么规则?
F294133033 2018-01-19
  • 打赏
  • 举报
回复
你这个SQL 只解决了一对多、多对一。 D60_RKEY PARTS_ORDERED BASE_WO QUAN_SCH R4 30 B4 40 R4 30 B5 50 R5 40 B5 50 多对多的结果应该是这样的: B4 70--(30+40) 90 --(40+50) B5 70--(30+40) 90 --(40+50)
二月十六 2018-01-19
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([D60_RKEY] nvarchar(22),[PARTS_ORDERED] int,[BASE_WO] nvarchar(22),[QUAN_SCH] int)
Insert #T
select N'R1',10,N'B1',5 union all
select N'R1',10,N'B2',10 union all
select N'R2',20,N'B3',44 union all
select N'R3',15,N'B3',44 union all
select N'R4',30,N'B4',40 union all
select N'R4',30,N'B5',50 union all
select N'R5',40,N'B5',50
Go
--测试数据结束
SELECT t.BASE_WO ,
( SELECT SUM(PARTS_ORDERED)
FROM #T a
WHERE a.BASE_WO = t.BASE_WO
) PARTS_ORDERED ,
( SELECT SUM(QUAN_SCH)
FROM #T a
WHERE a.D60_RKEY = t1.D60_RKEY
) QUAN_SCH
FROM ( SELECT DISTINCT
BASE_WO
FROM #T
) t
JOIN ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY BASE_WO ORDER BY D60_RKEY ) AS rn
FROM #T
) t1 ON t1.BASE_WO = t.BASE_WO
AND rn = 1


听雨停了 2018-01-19
  • 打赏
  • 举报
回复
B4 70--(30+40) 90 --(10+50) B5 70--(30+40) 90 --(10+50) 你这结果咋来的啊,10+50咋会等于90呢

use Tempdb
go
--> --> 听雨停了-->生成测试数据
 
if not object_id(N'Tempdb..#tab') is null
	drop table #tab
Go
Create table #tab([D60_RKEY] nvarchar(22),[PARTS_ORDERED] int,[BASE_WO] nvarchar(22),[QUAN_SCH] int)
Insert #tab
select N'R1',10,N'B1',5 union all
select N'R1',10,N'B2',10 union all
select N'R2',20,N'B3',44 union all
select N'R3',15,N'B3',44 union all
select N'R4',30,N'B4',40 union all
select N'R4',30,N'B5',50 union all
select N'R5',40,N'B5',50
Go
SELECT DISTINCT  base_wo,
SUM(parts_ordered) OVER(PARTITION BY base_wo) AS parts_ordered  ,
SUM(quan_sch) OVER(PARTITION BY d60_rkey) AS d60_rkey
from #tab

base_wo                parts_ordered d60_rkey
---------------------- ------------- -----------
B1                     10            15
B2                     10            15
B3                     35            44
B4                     30            90
B5                     70            50
B5                     70            90
按我的理解可以得到一个这样的结果,不知道行不行
F294133033 2018-01-19
  • 打赏
  • 举报
回复
括号内容是备注数据的来源,不用再结果中显示。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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