You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sparx EA中基于MS SQL Server的SQL查询:将ActualPost的Multiplicity转换为多行的实现方案(兼容EA查询限制)

解决Sparx EA中Multiplicity转多行的SQL方案(无WITH子句)

针对你在Sparx EA里需要将Multiplicity值展开为对应行数的需求,同时考虑到EA不支持WITH子句的限制,我们可以利用MS SQL Server内置的系统表来生成数字序列,实现行的重复。以下是可行的查询方案:

最终SQL查询(适配常规Multiplicity值)

SELECT 
    system.Name AS Series, 
    systemElement.Name AS GroupName
FROM 
    t_object systemElement 
INNER JOIN 
    t_object system ON system.Object_ID = systemElement.ParentID 
INNER JOIN 
    t_object organization ON organization.ParentID = systemElement.Object_ID 
INNER JOIN 
    t_object post ON post.ParentID = organization.Object_ID AND post.Stereotype = 'ActualPost'
-- 利用系统表生成1到2047的数字序列,匹配Multiplicity次数
INNER JOIN 
    master..spt_values nums ON nums.type = 'P' 
                            AND nums.number BETWEEN 1 AND post.Multiplicity
WHERE 
    system.Name = 'Name of my main system object'
ORDER BY 
    systemElement.Name, post.Name, nums.number

针对大Multiplicity值的扩展方案

如果你的Multiplicity可能超过2047(master..spt_values的默认数字上限),可以用自连接生成更大范围的数字序列,避免上限限制:

SELECT 
    system.Name AS Series, 
    systemElement.Name AS GroupName
FROM 
    t_object systemElement 
INNER JOIN 
    t_object system ON system.Object_ID = systemElement.ParentID 
INNER JOIN 
    t_object organization ON organization.ParentID = systemElement.Object_ID 
INNER JOIN 
    t_object post ON post.ParentID = organization.Object_ID AND post.Stereotype = 'ActualPost'
-- 自连接生成1到10000的数字序列(可根据需求调整范围)
INNER JOIN (
    SELECT 
        (a.number * 100) + b.number + 1 AS num
    FROM 
        master..spt_values a
    CROSS JOIN 
        master..spt_values b
    WHERE 
        a.type = 'P' AND a.number < 100
        AND b.type = 'P' AND b.number < 100
) nums ON nums.num BETWEEN 1 AND post.Multiplicity
WHERE 
    system.Name = 'Name of my main system object'
ORDER BY 
    systemElement.Name, post.Name, nums.num

方案说明

  1. 系统表master..spt_values的作用:
    • 这个内置表的type='P'条目包含0到2047的整数,刚好用来生成重复行的计数逻辑。通过nums.number BETWEEN 1 AND post.Multiplicity,让每个post记录根据自身Multiplicity值生成对应次数的重复行。
  2. 处理非整数Multiplicity:
    如果post.Multiplicity存储的是字符串格式(比如"0..2"或"1"),需要先转换为纯整数,例如用CAST(REPLACE(REPLACE(post.Multiplicity, '0..', ''), '..', '') AS INT)提取有效数值。

示例验证

用你提供的测试数据运行第一个查询,会输出符合预期的结果:

SeriesGroupName
Name of my main system elementOperationalPerformer A
Name of my main system elementOperationalPerformer A
Name of my main system elementOperationalPerformer A
Name of my main system elementOperationalPerformer A
Name of my main system elementOperationalPerformer B
Name of my main system elementOperationalPerformer B
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C
Name of my main system elementOperationalPerformer C

内容的提问来源于stack exchange,提问作者Robbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:37:40