跪求鞋业订单装箱配码算法

xiao163liu 2010-04-03 11:45:48
现在客户有这么一个要求(用存储过程实现):订单有445对鞋,
--34码---35码---36码--37码--38码
--45对--150对--150对--50对--50对
先我要求用8对装的箱子装,系统自动算出要几个外箱及每箱的装箱明细(而且每箱不能只装一个码数,除非是尾数)。
请高手给个思路。谢谢!!
...全文
826 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
muchjoy 2010-04-09
  • 打赏
  • 举报
回复
不是很伦理解,或许学的不够深吧,还得多想想!
老黎 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 htl258 的回复:]
SQL code
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 19:20:29
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.25……
[/Quote]
up好心人
  • 打赏
  • 举报
回复
先按标准箱来分好了,123321或者其它配码来装
然后再搞剩下的装一箱,简单又方便,还可以利用现有的外箱库存

不过一般客户订货的时候都会指定配码的吧,既然他没指定,那意思就是可以按任意配码装了
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acmain_chm 的回复:]

(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语……
[/Quote]
严重支持,呼吁了好几年了,还是很多人不注意。
htl258_Tony 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 ldslove 的回复:]
引用 21 楼 htl258 的回复:
SQL code
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 19:20:29
-- Version:Microsoft SQL Server 2008……
[/Quote]
真好,这个时候还有两只猫友陪伴.
黄_瓜 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 ldslove 的回复:]
引用 21 楼 htl258 的回复:
SQL code
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 19:20:29
-- Version:Microsoft SQL Server 2008……
[/Quote]
东那个升 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 htl258 的回复:]
SQL code
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 19:20:29
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.25……
[/Quote]
htl258_Tony 2010-04-04
  • 打赏
  • 举报
回复
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 19:20:29
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------

IF NOT OBJECT_ID('[订单信息表]') IS NULL
DROP TABLE [订单信息表]
GO
CREATE TABLE [订单信息表](ID int identity primary key,订单号 nvarchar(10),类型 nvarchar(10),[尺码] INT,[订单量] INT)
INSERT [订单信息表]
SELECT 'SE001','女鞋',34,8 UNION ALL
SELECT 'SE001','女鞋',35,10 UNION ALL
SELECT 'SE001','女鞋',36,19 UNION ALL
SELECT 'SE001','女鞋',37,17 UNION ALL
SELECT 'SE001','女鞋',38,16 UNION ALL
SELECT 'SE001','女鞋',39,8 UNION ALL
SELECT 'SE001','女鞋',40,8 UNION ALL
SELECT 'SE002','童鞋',27,10 UNION ALL
SELECT 'SE002','童鞋',28,13 UNION ALL
SELECT 'SE002','童鞋',29,19 UNION ALL
SELECT 'SE002','童鞋',30,19 UNION ALL
SELECT 'SE002','童鞋',31,18 UNION ALL
SELECT 'SE002','童鞋',32,11 UNION ALL
SELECT 'SE002','童鞋',33,11
GO
--SELECT sum([订单量]) FROM [订单信息表] where 类型='童鞋' --101

IF NOT OBJECT_ID('[装箱配比表]') IS NULL
DROP TABLE [装箱配比表]
GO
CREATE TABLE [装箱配比表](ID INT IDENTITY,类型 VARCHAR(20),尺码 int,单箱数量 int)
INSERT [装箱配比表]
SELECT '女鞋',34,1 UNION ALL
SELECT '女鞋',35,1 UNION ALL
SELECT '女鞋',36,2 UNION ALL
SELECT '女鞋',37,2 UNION ALL
SELECT '女鞋',38,2 UNION ALL
SELECT '女鞋',39,1 UNION ALL
SELECT '女鞋',40,1 UNION ALL
SELECT '童鞋',27,2 UNION ALL
SELECT '童鞋',28,2 UNION ALL
SELECT '童鞋',29,3 UNION ALL
SELECT '童鞋',30,3 UNION ALL
SELECT '童鞋',31,3 UNION ALL
SELECT '童鞋',32,2 UNION ALL
SELECT '童鞋',33,2
GO

IF OBJECT_ID('SP_GETQTY') IS NOT NULL
DROP PROC SP_GETQTY
GO
CREATE PROC SP_GETQTY
@TYPE NVARCHAR(20)='女鞋'
AS
DECLARE @S NVARCHAR(MAX)
SELECT @S=ISNULL(@S+',','')+QUOTENAME(尺码)
FROM [装箱配比表]
WHERE 类型=@TYPE
EXEC(
'WITH T AS
(
SELECT A.*,B.单箱数量,
CEILING(SUM(A.订单量)OVER(PARTITION BY A.订单号,A.类型)*1./
SUM(B.单箱数量)OVER(PARTITION BY A.订单号,A.类型)) AS 理论箱数
FROM [订单信息表] A
JOIN [装箱配比表] B
ON A.类型=B.类型 AND A.尺码=B.尺码
WHERE B.类型='''+@TYPE+'''
)
,T1 AS
(
SELECT A.*,B.NUMBER+1 箱号
FROM T A
JOIN MASTER..SPT_VALUES B
ON B.TYPE=''P'' AND B.NUMBER<A.理论箱数
)
,T2 AS
(
SELECT 订单号,类型,尺码,箱号,
CASE WHEN 箱号=理论箱数 THEN 订单量-单箱数量*箱号+单箱数量
WHEN 箱号* 单箱数量<=订单量 THEN 单箱数量
ELSE 0
END AS 实际装箱量
FROM T1
)
SELECT *
FROM T2 A
PIVOT(MAX(实际装箱量) FOR 尺码 IN('+@S+')) B'
)
GO

EXEC SP_GETQTY '女鞋'
/*
订单号 类型 箱号 34 35 36 37 38 39 40
---------- ---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
SE001 女鞋 1 1 1 2 2 2 1 1
SE001 女鞋 2 1 1 2 2 2 1 1
SE001 女鞋 3 1 1 2 2 2 1 1
SE001 女鞋 4 1 1 2 2 2 1 1
SE001 女鞋 5 1 1 2 2 2 1 1
SE001 女鞋 6 1 1 2 2 2 1 1
SE001 女鞋 7 1 1 2 2 2 1 1
SE001 女鞋 8 1 1 2 2 2 1 1
SE001 女鞋 9 0 2 3 1 0 0 0

(9 行受影响)
*/

EXEC SP_GETQTY '童鞋'
/*
订单号 类型 箱号 27 28 29 30 31 32 33
---------- ---------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
SE002 童鞋 1 2 2 3 3 3 2 2
SE002 童鞋 2 2 2 3 3 3 2 2
SE002 童鞋 3 2 2 3 3 3 2 2
SE002 童鞋 4 2 2 3 3 3 2 2
SE002 童鞋 5 2 2 3 3 3 2 2
SE002 童鞋 6 0 3 4 4 3 1 1

(6 行受影响)
*/
此题相当麻烦,花了一夜的时间.只能计算到在最后一箱调整零数.
xiao163liu 2010-04-03
  • 打赏
  • 举报
回复
就是要混码合装
htl258_Tony 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiao163liu 的回复:]
你们这都是单码装的,我要的结果是这样的:
1-2-2-2-1 10件
1-1-2-1-1 8件
这样的结果。不知道大家能不能理解我的意思
[/Quote]
混码合装是吗
SQL77 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiao163liu 的回复:]
你们这都是单码装的,我要的结果是这样的:
1-2-2-2-1 10件
1-1-2-1-1 8件
这样的结果。不知道大家能不能理解我的意思
[/Quote]
楼主的结果比较难以实现
SQL77 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 htl258 的回复:]
SQL code
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 12:00:00
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.16……
[/Quote]
TONY哥,你这样是没考虑合并其它的鞋子在一起,

445/8<=56个就行了,

其它的可以装一起,也可以不用装一起
xiao163liu 2010-04-03
  • 打赏
  • 举报
回复
你们这都是单码装的,我要的结果是这样的:
1-2-2-2-1 10件
1-1-2-1-1 8件
这样的结果。不知道大家能不能理解我的意思
ACMAIN_CHM 2010-04-03
  • 打赏
  • 举报
回复
(不要高估你的汉语表达能力或者我的汉语理解能力)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

htl258_Tony 2010-04-03
  • 打赏
  • 举报
回复
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 12:00:00
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([a] INT,[b] INT)
INSERT [tb]
SELECT 34,45 UNION ALL
SELECT 35,150 UNION ALL
SELECT 36,150 UNION ALL
SELECT 37,50 UNION ALL
SELECT 38,50
GO
--SELECT * FROM [tb]

-->SQL查询如下:
IF NOT OBJECT_ID('[sp_getqty]') IS NULL
DROP PROC [sp_getqty]
GO
CREATE PROC [sp_getqty]
@a int=NULL, --起始尺码,为NULL时表时所有尺码
@b int=NULL --终止尺码,为NULL时表时所有尺码
AS
SELECT ISNULL(LTRIM(A),'合计') 尺码,SUM(CEILING(B*1./8)) AS 外箱数
FROM TB
WHERE a BETWEEN ISNULL(@a,a) AND ISNULL(@b,a)
GROUP BY A
WITH ROLLUP
GO

--调用:
EXEC [sp_getqty]
/*
尺码 外箱数
------------ ---------------------------------------
34 6
35 19
36 select 18*8
37 7
38 7
合计 58

(6 行受影响)
*/

EXEC [sp_getqty] 34,36
/*
尺码 外箱数
------------ ---------------------------------------
34 6
35 19
36 19
合计 44

(4 行受影响)

*/
htl258_Tony 2010-04-03
  • 打赏
  • 举报
回复
--------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-04-03 12:00:00
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([a] INT,[b] INT)
INSERT [tb]
SELECT 34,45 UNION ALL
SELECT 35,150 UNION ALL
SELECT 36,150 UNION ALL
SELECT 37,50 UNION ALL
SELECT 38,50
GO
--SELECT * FROM [tb]

-->SQL查询如下:
SELECT ISNULL(LTRIM(A),'合计') 尺码,SUM(CEILING(B*1./8)) AS 外箱数
FROM TB
GROUP BY A
WITH ROLLUP
/*
尺码 外箱数
------------ ---------------------------------------
34 6
35 19
36 19
37 7
38 7
合计 58

(6 行受影响)
*/
pt1314917 2010-04-03
  • 打赏
  • 举报
回复
没搞懂什么意思,帮顶···
dawugui 2010-04-03
  • 打赏
  • 举报
回复
这个?帮顶了.
csmark 2010-04-03
  • 打赏
  • 举报
回复
tony ,你可能还不了解这个问题。我来帮xiao163liu详细说明下需求。这个问题我也考虑过。呵呵,代码写不出来。
我们就拿鞋来举例,先介绍下鞋的特点。鞋有分款号,颜色,配码。同款同色的鞋按照配码装箱,配码的码段有分男女。一般男码从39-44,女码从36-41。不能按照配码装箱的是散码。
数据: 鞋的数量就按照刘兄弟的数据。码段34-38,一件为8双。
要求: 根据指定配码计算每个配码的箱数,不能按照配码装箱的散码按码号显示,支持再根据配码装箱。直到尾数<8
老黎 2010-04-03
  • 打赏
  • 举报
回复
箱子是几对装?
题目中说8对
后面例子中是10对???
加载更多回复(8)
《信华ERP生产管理软件鞋业高级版》是信华软件科技有限公司针对造鞋企业开发的一套ERP生产管理软件,让企业从接单,下生产单,审批,物料消耗采购、领用,生产过程跟踪,生产完成入库,送货,以及所产生的应收应付业务和所有管理报表,进行全过程的规范化管理。 1.通过《信华ERP生产管理软件鞋业高级版》这个信息平台让企业管理者很容易就了解到每张订单生产进程、生产单完成情况,保证每一张订单按时、按质、按量完成。 2.软件生产单上不但有产品鞋的尺码表,还有生产相配套鞋根、大底、中底的对应尺码列表,和品牌、颜色、楦型、底型等工艺要求,并且生产单可保存四张图片,可打印前两张图片。软件还根据造鞋业五个标准的工序“裁料、针车、成型、PU、包装”设计了各工序的生产指令单,使生产安排更方便。 3.生产单有“裁料状态、针车状态、成型状态、PU状态、包装状态”,只要在生产进度录入功能中设置,就能让管理者在生产单查询时清楚掌握每张单的生产状态。 4.软件有完善的物料管理功能,可以设置成品BOM表(物料构成表),并可根据BOM表进行仓库物料比对,计算出成品生产所需整批物料的数量,还可生成缺料表,方便物料的采购和领用操作,随时可以查询到仓库物料的实有数量以及缺料情况,保证每一张订单足料生产。 5.软件可以设置各产品的工序及相应工序的单价,通过录入生产进度,软件自动统计汇总各员工的计件工资,减省企业管理者的统计工资时间。 6.软件有严密的应收应付模块,方便企业查询应收应付帐款,和客户对帐及追收货款。

34,576

社区成员

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

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