找回密码
 立即注册

QQ登录

只需一步,快速开始

AAA努力才幸福

初级会员

26

主题

84

帖子

338

积分

初级会员

积分
338
AAA努力才幸福
初级会员   /  发表于:2023-3-9 18:08  /   查看:3095  /  回复:16
100金币
表格生成的json数据

批次编号去重后写入  批次划分
同批次内的标ID   去重后写入   标划分


同批次下和同标号下的  对应的标ID、包号、报名、中标厂家   去重后写入  包划分
同批次下和同标号和同包号的   对应的包ID、请购单号、行号、物料编码、含税单价、含税金额   写入  包明细3


主子关系
批次划分<标划分<包划分<包明细

把以上二维表格中写入对应的主子表








附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

16 个回复

正序浏览
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2023-3-15 15:18:22
17#
AAA努力才幸福 发表于 2023-3-15 13:57
我用sql语句完成整个存储过程,服务端命令不知道咋实现,希望有格友能写个纯服务端命令实现

回复 使用道具 举报
AAA努力才幸福
初级会员   /  发表于:2023-3-15 13:57:30
16#
本帖最后由 AAA努力才幸福 于 2023-3-20 11:10 编辑

我用sql语句完成整个存储过程,服务端命令不知道咋实现,希望有格友能写个纯服务端命令实现





BEGIN
   -- 存储过程的代码逻辑
         
         -- 解析json数据并保存为临时表
CREATE TEMPORARY TABLE IF NOT EXISTS jt AS (
SELECT
jtt.*,
-- 转换excel传入的时间戳
FROM_UNIXTIME((招标发布日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 招标发布日期,
-- FROM_UNIXTIME((请购日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 请购日期,
-- FROM_UNIXTIME((创建时间1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 创建时间,
FROM_UNIXTIME((开标日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 开标日期,
FROM_UNIXTIME((定标日期1-70*365-19)*86400-8*3600,'%Y-%m-%d') AS 定标日期
        FROM         jsontemp,
        JSON_TABLE(aaa, '$
  • ' COLUMNS (
             批次编号 VARCHAR(50) PATH '$."批次编号"',
        批次名称 VARCHAR(100) PATH '$."批次名称"',
        招标发布日期1 VARCHAR(255) PATH '$."招标发布日期"',
        标号 VARCHAR(255) PATH '$."标号"',
        标名 VARCHAR(50) PATH '$."标名"',
        包号 VARCHAR(255) PATH '$."包号"',
        包名称 VARCHAR(50) PATH '$."包名称"',
      --  需求组织编码 VARCHAR(50) PATH '$."需求组织编码"',
      --  需求组织名称 VARCHAR(100) PATH '$."需求组织名称"',
        请购单号 VARCHAR(50) PATH '$."请购单号"',
      --  请购日期1 VARCHAR(255) PATH '$."请购日期"',
      --  创建时间1 VARCHAR(255) PATH '$."创建时间"',
      --  备注 VARCHAR(255) PATH '$."备注"',
        行号 VARCHAR(50) PATH '$."行号"',
      --  物料编码 VARCHAR(50) PATH '$."物料编码"',
      --  物料名称 VARCHAR(100) PATH '$."物料名称"',
      --  需求日期1 VARCHAR(255) PATH '$."需求日期"',
      --  主数量 VARCHAR(255) PATH '$."主数量"',
      --  计量单位 VARCHAR(50) PATH '$."计量单位"',
      --  行备注 VARCHAR(255) PATH '$."行备注"',
      --  项目编码 VARCHAR(50) PATH '$."项目编码"',
      --  项目名称 VARCHAR(100) PATH '$."项目名称"',
      --  无税税单价 VARCHAR(255)PATH '$."无税税单价"',
        税率 VARCHAR(255) PATH '$."税率"',
        含税单价 VARCHAR(255) PATH '$."含税单价"',
        含税金额 VARCHAR(255) PATH '$."含税金额"',
        中标厂家 VARCHAR(100) PATH '$."中标厂家"',
        成交通知书编号  VARCHAR(255)  PATH '$."成交通知书编号"',
      --  采购方式 VARCHAR(255) PATH '$."采购方式"',
        采购方式ID INT PATH '$."采购方式ID"',
      --  开标状态 VARCHAR(255) PATH '$."开标状态"',
        开标状态ID INT PATH '$."开标状态ID"',
      --  评审方法 VARCHAR(255) PATH '$."评审方法"',
        评审方法ID INT PATH '$."评审方法ID"',
      --  流转平台 VARCHAR(255) PATH '$."流转平台"',
        流转平台ID INT PATH '$."流转平台ID"',
      --  报价方式 VARCHAR(255) PATH '$."报价方式"',
        报价方式ID INT PATH '$."报价方式ID"',
        开标日期1 VARCHAR(255) PATH '$."开标日期"',
        定标日期1 VARCHAR(255) PATH '$."定标日期"',
      --  采购组织 VARCHAR(255) PATH '$."采购组织"',
        采购组织ID VARCHAR(255) PATH '$."采购组织ID"',
      --  流转状态 VARCHAR(255) PATH '$."流转状态"',
        流转状态ID INT PATH '$."流转状态ID"',
    --   采购类型 VARCHAR(255) PATH '$."采购类型"',
        采购类型ID INT PATH '$."采购类型ID"',
      --  授权采购方式 VARCHAR(255) PATH '$."授权采购方式"',
        授权采购方式ID INT PATH '$."授权采购方式ID"',
      --  招标代理机构 VARCHAR(255) PATH '$."招标代理机构"',
        招标代理机构ID INT PATH '$."招标代理机构ID"'
    )) AS jtt);
             
             -- 增加供应商
    INSERT INTO 往来单位 (`供应商名称`, `性质ID`, `分类ID`)
    SELECT DISTINCT
        jt.中标厂家,
        1001,
        2
    FROM
        jt
        LEFT JOIN 往来单位 ON jt.中标厂家 = 往来单位.供应商名称
            WHERE
            `中标厂家` IS NOT NULL
    ON DUPLICATE KEY UPDATE
            `分类ID` = VALUES(`分类ID`);

    -- 批次划分
    INSERT INTO `批次划分` (批次编号, 批次名称, 流转状态ID ,授权采购方式ID ,单据日期 ,采购类型编号,经办组织)
    SELECT DISTINCT
            jt.`批次编号`,
            jt.`批次名称`,
            jt.`流转状态ID`,
            jt.`授权采购方式ID`,
            jt.`招标发布日期` as 单据日期,
            jt.采购类型ID as 采购类型编号,
            jt.采购组织ID as 经办组织
    FROM
            jt
    WHERE
            `批次编号` IS NOT NULL
    ON DUPLICATE KEY UPDATE
            `批次名称` = VALUES(`批次名称`),
            流转状态ID = VALUES(流转状态ID),
            `授权采购方式ID` = VALUES(`授权采购方式ID`),
            单据日期 = VALUES(`单据日期`),
            采购类型编号 = VALUES(`采购类型编号`),
            经办组织 = VALUES(`经办组织`);
           
           
    -- 标划分


    INSERT INTO `标划分` (`标号`, `标名`, `批次编号`, `开标状态ID`,单据日期,开标日期,定标日期,采购方式ID,流转状态ID        ,评审方法ID        ,招标代理机构ID)
    SELECT DISTINCT
            jt.`标号`,
            jt.`标名`,
            jt.`批次编号`,
            jt.`开标状态ID`,
            jt.`招标发布日期` as 单据日期,
      jt.开标日期,
      jt.定标日期,
      jt.采购方式ID,
      jt.流转状态ID,
      jt.评审方法ID,
      jt.招标代理机构ID
    FROM
            jt
    WHERE
            `标号` IS NOT NULL and
            `批次编号` IS NOT NULL
    ON DUPLICATE KEY UPDATE
            `标名` = VALUES(`标名`),
            `开标状态ID` = VALUES(`开标状态ID`),
            `单据日期` = VALUES(`单据日期`),
            `开标日期` = VALUES(`开标日期`),
            `定标日期` = VALUES(`定标日期`),
            `采购方式ID` = VALUES(`采购方式ID`),
            `流转状态ID` = VALUES(`流转状态ID`),
            `评审方法ID` = VALUES(`评审方法ID`),
            `招标代理机构ID` = VALUES(`招标代理机构ID`)        ;

    -- 包划分
    INSERT INTO `包划分` (`包号`, `包名`, `标ID`, `中标厂家`, `中标厂家ID` ,开标状态ID ,评审方法ID        ,合同流转平台ID        ,报价方式ID        ,单据日期        ,流转状态ID        ,成交通知书编号)
    SELECT DISTINCT
        a.`包号`,
        a.`包名`,
        a.`标ID`,
                    a.`中标厂家`,
                    a.`中标厂家ID`,
                    a.开标状态ID,
        a.评审方法ID,
        a.流转平台ID as 合同流转平台ID,
        a.报价方式ID,
        a.招标发布日期 as 单据日期,
        a.流转状态ID,
        a.成交通知书编号       
                   
    FROM
        (SELECT
            jt.`批次编号`,
            jt.`标号`,
            jt.`包号`,
            jt.`包名称`as `包名`,
                        jt.`中标厂家`,
            jt.成交通知书编号,
                        jt.开标状态ID,
            jt.评审方法ID,
            jt.流转平台ID,
            jt.报价方式ID,
            jt.招标发布日期,
            jt.流转状态ID,
                       `往来单位`.ID as 中标厂家ID,
           `标划分`.ID as 标ID
        FROM
            jt
            INNER JOIN `标划分` ON jt.`批次编号` = `标划分`.`批次编号` AND jt.`标号` = `标划分`.`标号`
                                    LEFT JOIN `往来单位` ON jt.`中标厂家` = `往来单位`.`供应商名称`) AS a                       
    WHERE
        a.`包号` IS NOT NULL
    ON DUPLICATE KEY UPDATE
       `包名` = VALUES(`包名`),
       `中标厂家`= VALUES (`中标厂家`),
       `中标厂家ID` =VALUES (`中标厂家ID`),
       `开标状态ID` =VALUES (`开标状态ID`),         
             `评审方法ID` =VALUES (`评审方法ID`),
             `合同流转平台ID` =VALUES (`合同流转平台ID`),
             `报价方式ID` =VALUES (`报价方式ID`),
             `单据日期` =VALUES (`单据日期`),
             `流转状态ID` =VALUES (`流转状态ID`),
             `成交通知书编号` =VALUES (`成交通知书编号`);

    -- 包明细
    INSERT INTO `包明细` (`计划物料ID`, `中标单价`, `中标金额`, `包ID`)
    SELECT
        a.`计划物料ID`,
        a.`中标单价`,
        a.`中标金额`,
        a.`包ID`
    FROM
        (SELECT
            jt.`包名称`,
            jt.`请购单号`,
            jt.`行号`,
            jt.`含税单价` AS `中标单价`,
            jt.`含税金额` AS `中标金额`,
            jt.`中标厂家`,
            `采购计划明细表`.ID AS `计划物料ID`,
            jt.`标名`,
            `标划分`.ID AS `标ID`,
            `包划分`.ID AS `包ID`,
            `批次划分`.`批次编号`
    FROM
            jt
            LEFT JOIN
            `采购计划明细表`
            ON
                    jt.`请购单号` = `采购计划明细表`.`请购单号` AND
                    jt.`行号` = `采购计划明细表`.`行号`
            INNER JOIN
            `包划分`
            ON
                    jt.`包号` = `包划分`.`包号`
            INNER JOIN
            `标划分`
            ON
                    jt.`标号` = `标划分`.`标号` AND
                    `包划分`.`标ID` = `标划分`.ID
            INNER JOIN
            `批次划分`
            ON
                    jt.`批次编号` = `批次划分`.`批次编号` AND
                    `标划分`.`批次编号` = `批次划分`.`批次编号`
        ) AS a
    WHERE
        a.`请购单号` IS NOT NULL
    ON DUPLICATE KEY UPDATE
        `中标单价` = VALUES(`中标单价`),
        `中标金额` = VALUES(`中标金额`);
    TRUNCATE TABLE `jsontemp`;       
             
    END
  • 回复 使用道具 举报
    Joe.xu讲师达人认证 悬赏达人认证 活字格认证
    超级版主   /  发表于:2023-3-13 10:00:16
    15#
    数据民工 发表于 2023-3-12 12:55
    我用这个插件完成了一个纯服务端命令的行转列操作,你可以去看看我发的贴子

    回复 使用道具 举报
    数据民工悬赏达人认证 活字格认证
    高级会员   /  发表于:2023-3-12 12:55:35
    14#

    我用这个插件完成了一个纯服务端命令的行转列操作,你可以去看看我发的贴子
    回复 使用道具 举报
    夏雪冬阳
    论坛元老   /  发表于:2023-3-12 12:30:45
    13#
    数据民工 发表于 2023-3-9 20:31
    这个对象与集合操作工具简直就是神器,以前有很多这种查询多行数据,还有SQL语句得到的结果集,都可以用这 ...

    可有教程,
    回复 使用道具 举报
    Joe.xu讲师达人认证 悬赏达人认证 活字格认证
    超级版主   /  发表于:2023-3-10 12:14:10
    11#
    sql大神呀~
    回复 使用道具 举报
    AAA努力才幸福
    初级会员   /  发表于:2023-3-10 10:21:07
    10#
    我直接写成存储过程了方便很多
    回复 使用道具 举报
    Joe.xu讲师达人认证 悬赏达人认证 活字格认证
    超级版主   /  发表于:2023-3-10 09:52:46
    9#
    期待民工大佬的demo,
    回复 使用道具 举报
    AAA努力才幸福
    初级会员   /  发表于:2023-3-9 22:08:23
    8#
    数据民工 发表于 2023-3-9 20:31
    这个对象与集合操作工具简直就是神器,以前有很多这种查询多行数据,还有SQL语句得到的结果集,都可以用这 ...

    你太懂我了,等你电脑修好了,给我个demo我学着下
    回复 使用道具 举报
    数据民工悬赏达人认证 活字格认证
    高级会员   /  发表于:2023-3-9 20:31:26
    7#
    这个对象与集合操作工具简直就是神器,以前有很多这种查询多行数据,还有SQL语句得到的结果集,都可以用这个插件来处理数据,简直就是随心所欲。还可以把数据在数组,对象,JSON之间随便变化
    就你这个需求,完全可以用这插件来处理,你现在唯一的卡点在于JSON与数组之间的转换上,只要这点突破了,剩下的相信你自己都可以搞定,对吧?





    对象与集合操作工具 - 葡萄城市场 (grapecity.com.cn)

    回复 使用道具 举报
    12下一页
    您需要登录后才可以回帖 登录 | 立即注册
    返回顶部