怎么按照供应商分组计算准交率

monkerly_asser 2017-01-09 08:46:41
本人sql server学几个星期的小白。遇到个难题,想问问论坛大佬们。准交率就是准时交货的单与总的交货单的比值。现在能按照供应商分组准时交货的单数,和按照供应商分组总的交货单。想问下接下来应该怎么处理。假定供应商有交货,但是准时交货次数为零的
...全文
528 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2017-01-10
  • 打赏
  • 举报
回复
用 WITH 只是为了方便阅读。
这里不存在递归/多次引用,如果你愿意,可以改为子查询的格式。
monkerly_asser 2017-01-09
  • 打赏
  • 举报
回复
贴现在写的代码,不知道怎么把准时交货次数和总交货次数写进一条,它们只有一个条件不一样.望指点下
DECLARE @variables1 DECIMAL(15,2)
DECLARE @variables2 DECIMAL(15,2)
--供应商准时交货的次数
SELECT @variables1=(
SELECT COUNT(DISTINCT (CG001+CG002+CG003))--采购单别,采购单号,采购单序号
,CG004									  --供应商
FROM PURTD CG LEFT JOIN JH ON CG001=JH006 AND CG002=JH007         
WHERE CG004<JH004    AND CG005>20161201   --预交货日<进货日期
GROUP BY CG004
)
--总交货次数
SELECT @variables2=(
SELECT COUNT(DISTINCT (CG001+CG002+CG003)),CG004									  
FROM PURTD CG LEFT JOIN JH ON CG001=JH006 AND CG002=JH007         
WHERE CG005>20161201   
GROUP BY CG004
)
--
select cast(ISNULL(cast((@variables1 / Case When @variables2=0 then 1 else
 @variables2 end)*100 as decimal(15,2)),0) as varchar(20)) As '准时交货率'
monkerly_asser 2017-01-09
  • 打赏
  • 举报
回复
准交率直接为零。是不是用游标逐项相除处理?
monkerly_asser 2017-01-09
  • 打赏
  • 举报
回复
可能日期是反了(img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/10.gif][/img]对业务不了解),之前算总准交率用两个变量搞定,就一直跳不出这个框架,with as 子查询很少用,本来还想建临时表来着,现在发现这个不错,领教了
Tiger_Zhao 2017-01-09
  • 打赏
  • 举报
回复
多个供应商,怎么能用两个变量表示?
还有你“准时”的日期比较反了吧。
按下面的方式留下自己需要的字段。
;WITH T AS (
SELECT CG001,CG002,CG003,CG004,
CG005,JH004,
CASE WHEN JH004 IS NULL THEN
0
WHEN CG005 > JH004 THEN
1
ELSE
0
END ZS
FROM PURTD CG
LEFT JOIN JH
ON CG001=JH006
AND CG002=JH007
AND CG003=JH008
WHERE CG005>20161201
)
SELECT CG004,
COUNT(*) AS 总交货次数,
COUNT(*)-COUNT(JH004) AS 未交货次数,
COUNT(JH004) AS 已交货次数,
SUM(ZS) AS 准时交货次数,
SUM(ZA)*100.0 / COUNT(*) AS 准时交货率
FROM T
GROUP BY CG004
monkerly_asser 2017-01-09
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
一) CG004 即是供应商又是预交货日(CG004<JH004)? 二) 一个采购单号下多个采购单序号,到底是一起交货还是分开交货的? 二.A) 如果一起,DISTINCT 为什么还要区分CG003? 二.B) 如果分开,连接条件为什么不包含CG003?
我打错了,CG005是预交货日,连接条件漏了CG003=JH008 谢谢指点出来,(由于原代码连接表太多 ,我简化了问题发上来的 )现在发现查询出来包括两列,无法用变量@variables1
Tiger_Zhao 2017-01-09
  • 打赏
  • 举报
回复
一) CG004 即是供应商又是预交货日(CG004<JH004)?
二) 一个采购单号下多个采购单序号,到底是一起交货还是分开交货的?
二.A) 如果一起,DISTINCT 为什么还要区分CG003?
二.B) 如果分开,连接条件为什么不包含CG003?

34,576

社区成员

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

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