开发者社区 > 云原生 > Serverless > 正文

宜搭应用中,主表中的子表,需统计子表中相同项目中,由上到下,每行中相同项目出现的次数。

场景:
建立主表后,子表中放入单选类型“原材料”、“半成品”、“成品”,如在1行、2行选择“原材料”,3行、4行选择“半成品”,那么在1行返回值为1;2行返回值为2;3行返回值为1;4行返回值为2;从而识别出各类型、各行项目出现的频次。谢谢

展开
收起
we33bjgmwe7f2 2024-03-25 14:09:26 134 0
4 条回答
写回答
取消 提交回答
  • 要实现您描述的功能,可以创建如下数据结构:

    主表:包含必要的基础信息,如ID、项目名称等。

    子表:存储每行项目的选择类型,包含字段如主表ID(外键)、行号、类型(原材料、半成品、成品)。

    子表数据示例:

    主表ID行号类型
    11原材料
    12原材料
    13半成品
    14半成品

    通过SQL查询,可以统计各类别在各行出现的频次:

       SELECT 
           t1.type,
           t1.row_number,
           COUNT(*) AS frequency
       FROM 
           sub_table t1
       GROUP BY 
           t1.type, t1.row_number;
    

    结果将显示每种类型在对应行号的出现频次。

    2024-03-25 15:21:13
    赞同 展开评论 打赏
  • 阿里云大降价~

    要统计子表中相同项目出现的次数,可以使用以下方法:

    1. 首先,在主表的子表中,、半成品、成品)添加一个辅助列,用于记录该类型项目的累计次数。例如,为“原材料”类型的项目添加一个名为“原材料计数”的辅助列,初始值设为0。

    2. 在子表中,针对每个单选类型,编写一个公式来计算该项目的出现次数。以“原材料”类型为例,可以使用以下公式:

    =IF(当前行单选类型为"原材料", 原材料计数列的值+1, 原材料计数列的值)
    

    将这个公式应用到子表中的每一行。

    1. 对于其他单选类型(半成品、成品),重复步骤2中的操作,编写相应的公式并应用到子表中的每一行。

    这样,子表中的每一行都会显示相应单选类型项目的累计出现次数。

    2024-03-25 14:53:32
    赞同 展开评论 打赏
  • 要实现您描述的功能,您可以使用数据库查询结合应用程序逻辑来完成。这里有一个基本的思路,我们将分步骤进行说明:

    1. 数据库表结构

    假设您有两个表:主表和子表。子表中有一个字段用于存放“原材料”、“半成品”、“成品”这样的类型。

    子表结构可能如下所示:

    CREATE TABLE SubTable (
        id INT PRIMARY KEY AUTO_INCREMENT,  -- 假设有一个自增主键
        main_table_id INT,                   -- 关联主表的外键
        item_type VARCHAR(50),               -- 存放“原材料”、“半成品”、“成品”的字段
        -- 其他字段...
    );
    
    1. 插入数据

    按照您的描述,插入数据到子表中。

    INSERT INTO SubTable (main_table_id, item_type) VALUES
    (1, '原材料'),
    (1, '原材料'),
    (1, '半成品'),
    (1, '半成品');
    

    这里假设main_table_id都是1,意味着这些行都属于同一个主表记录。

    1. 查询并计算频次

    为了得到您想要的结果,可以使用一个CASE语句在查询时为每个item_type分配一个固定的值(比如“原材料”为1,“半成品”为2),然后使用ROW_NUMBER()函数为每个行分配一个序号。

    以下是一个可能的SQL查询示例:

    SELECT 
        id,
        main_table_id,
        item_type,
        CASE item_type
            WHEN '原材料' THEN 1
            WHEN '半成品' THEN 2
            WHEN '成品' THEN 3
            ELSE NULL  -- 或者其他默认值
        END AS type_value,
        ROW_NUMBER() OVER (PARTITION BY item_type ORDER BY id) AS row_number
    FROM SubTable
    WHERE main_table_id = 1;  -- 如果需要针对特定的主表记录
    

    这个查询会为每个item_type分配一个type_value,并为每个item_type内的行分配一个递增的row_number。但是请注意,ROW_NUMBER()函数是基于ORDER BY id的,这意味着行的顺序是基于id字段的。如果您希望基于其他字段排序,请相应地更改ORDER BY子句。

    1. 应用程序逻辑

    如果您想要在应用程序中处理这些值(例如,在Web应用程序中显示它们),您可以将上述查询结果作为数据集获取,并在应用程序中遍历这个数据集,根据type_valuerow_number来显示或处理数据。

    这只是一个基本的思路。根据您的具体需求(例如,使用的数据库类型、应用程序框架等),实现方式可能会有所不同。

    2024-03-25 14:53:33
    赞同 展开评论 打赏
  • 将军百战死,壮士十年归!

    在钉钉宜搭应用中,虽然不能直接提供一个简单的设置来实现行间相同项目累计计数的功能,但你可以通过一些间接的方式来达到类似效果。一种可能的做法是利用工作流和变量来进行动态计算和更新。

    以下是一种思路:

    1. 创建变量
      在工作流中创建一个变量数组,用于存储各类别(原材料、半成品、成品)在子表中出现的次数。

    2. 遍历子表
      当子表数据发生变化时(例如新增、编辑行),触发一个工作流,在工作流中遍历子表每一行的数据。

    3. 累加计数
      对于每行的数据,检查其“原材料”、“半成品”、“成品”的选择情况,然后在对应的变量数组中累加计数。

    4. 显示计数
      计算完成后,将这些计数值回填到主表或子表的某个显示组件上,比如可以在子表每行旁边增加一个文本或数值组件用来显示当前行该项目的累计出现次数。

    由于宜搭目前主要依赖于配置而非编程实现复杂逻辑,可能需要多个步骤和组件配合才能完成此功能,且可能存在一定的局限性。如果宜搭平台上已有内置的类似功能,或者未来版本更新增加了这样的功能,可以直接使用;否则,可能需要借助外部服务或程序开发能力来扩展实现。

    另外,如果你希望直接在子表中显示这种动态计数,可能需要定制开发或者向宜搭官方咨询是否有更加便捷的方式来实现此类需求。

    2024-03-25 14:22:54
    赞同 展开评论 打赏

快速交付实现商业价值。

热门讨论

热门文章

相关电子书

更多
宜搭 - 企业智能化应用搭建平台 立即下载
《云市场-宜搭解决方案》 立即下载
《宜搭开发手册》 立即下载