厦门德仔 2023-03-03 18:46 采纳率: 0%
浏览 74
已结题

C#或SQL 栈板拼箱算法

订单数据
订单号(DocNum) 周期码(LotNum) 数量(LotQty)
2201-2023030301-0001 2305 10000
2201-2023030301-0002 2306 15000
2201-2023030301-0003 2307 6000

每层6箱,每箱500
输出:产品清单
层码LevelCode 序号 Seq 层箱 BoxNum 周期码LotNum 每箱数量 BoxQty 订单号(DocNum)
1 1 6 2305 500 2201-2023030301-0001
2 2 6 2305 500 2201-2023030301-0001
3 3 6 2305 500 2201-2023030301-0001
4 4 2 2305 500 2201-2023030301-0001
4 5 4 2306 500 2201-2023030301-0002
5 6 6 2306 500 2201-2023030301-0002
6 7 6 2306 500 2201-2023030301-0002
7 8 6 2306 500 2201-2023030301-0002
8 9 6 2306 500 2201-2023030301-0002
9 10 2 2306 500 2201-2023030301-0002
9 11 4 2307 500 2201-2023030301-0003
10 12 6 2307 500 2201-2023030301-0003
11 13 2 2307 500 2201-2023030301-0003

img

实体:

    public class SalesOrder 
    {
        public string DocNum { get; set; }
        public string LotNum { get; set; }
        public int LotQty { get; set; }
    }
    public class Prd
    {
        public int LevelCode { get; set; }
public int Seq { get; set; }
        public int BoxNum { get; set; }
        public string LotNum { get; set; }
        public int BoxQty { get; set; }
        public string DocNum { get; set; }

    }

  • 写回答

6条回答 默认 最新

  • 文盲老顾 WEB应用领新星创作者 2023-03-03 21:07
    关注
    获得7.50元问题酬金

    来挑战 GPT 了

    mssql 用 cte 完成

    ;with t as (    -- 获取原始数据
        select '2201-2023030301-001' DocNum,2305 LotNum,10000 LotQty
        union all select '2201-2023030301-002',2306,15000
        union all select '2201-2023030301-003',2307,6000
    ),t1 as ( -- 计算可以分成多少箱
        select *,500 as BoxQty from t
    ),t2 as ( -- 对各类货品的箱子进行展开,分成每箱一行数据
        select *,LotQty / BoxQty as nums 
        from t1 a
        cross apply (
            select number from master..spt_values
            where type='p' and number between 1 and LotQty / BoxQty
        ) b
    ),t3 as ( -- 对已经分开的箱子,都进行编号
        select DocNum,LotNum,LotQty,BoxQty
            ,row_number() over(order by getdate()) boxNum 
        from t2
    ),t4 as ( -- 对编号进行除6运算,表示每六个一层
        select *,convert(int,(boxNum - 1) / 6) + 1 LevelCode 
        from t3
    ) -- 最后,分组统计一下就可以
    select DocNum,LotNum,LotQty,BoxQty,LevelCode,count(0) as BoxNum
        ,row_number() over(order by getdate()) Seq 
    from t4
    group by DocNum,LotNum,LotQty,BoxQty,LevelCode
    

    img

    评论

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 创建了问题 3月3日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持