Sparx EA热图:将一个选择子查询中的任何一个或多个结果组合为一个逗号分隔的值

时间:2019-05-22 11:25:08

标签: sql

我正在将Sparx EA 14.x与基于文件的存储库一起使用,并很快移入基于SQL Server的环境。当前正在创建一些基本模板级别的模型,稍后将在基于SQL Server的存储库中与实际客户数据一起使用。 我已经为例如创建了标记值(type = RefGUIDList)将关联添加到我的数据元素中的现有Bus.Process中。可以选择现有业务流程的列表,并将其.ea_guid作为值存储在标记的值中。

我创建了带有附加sql的HeatMap图表。

如果标记的值仅选择了一个业务流程,则sql正常运行,问题是如果我添加更多的流程将没有结果。

 SELECT (SELECT t_object.Name FROM t_object
         WHERE t_object.ea_guid = tv.Value) AS Series,
        t_object.Alias AS GroupName, Packages.Name 
 FROM t_object,
      t_package RootPackage,
      t_package Packages, 
      t_objectproperties tv 
 WHERE RootPackage.Name = 'Data elements' AND 
       Packages.Parent_ID = RootPackage.Package_ID AND 
       t_object.Package_ID = Packages.Package_ID AND 
       t_object.Object_ID = tv.Object_ID AND 
       tv.Property = 'APM:Prosesses'

我一直在寻找的一种解决方案是将列出的Bus.processes名称连接起来并显示结果。

我知道SQL Server方言不同于当前基于Access的存储库。

1 个答案:

答案 0 :(得分:0)

问题是Sparx t_objectproperties.ea_guid多次存储到t_objectproperties.Value中,我确实需要将对应的t_object.Name逗号连接起来。

在我的案例中,找到了一个解决方案,我首先将存储库移至基于SQL Server的存储库中,并创建了如下功能:

CREATE FUNCTION fnSplitString  
( 
    @string NVARCHAR(1000), 
    @delimiter CHAR(1) 
 ) 
 RETURNS VARCHAR(1000) AS  
 BEGIN 
    DECLARE @csvObjectname VARCHAR(1000)
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
      IF @end = 0  
        SET @end = LEN(@string) + 1
      SELECT @csvObjectname = COALESCE(@csvObjectname + ', ', '') +
            COALESCE(t_Object.Name,'')
      FROM t_Object
        WHERE t_Object.ea_guid = SUBSTRING(@string, @start, @end - @start) 
      SET @start = @end + 1 
      SET @end = CHARINDEX(@delimiter, @string, @start)

  END 
  RETURN @csvObjectname
END
相关问题