我有一个字符串值列表,如 select t1.ID, t1.FEEDBACK_VALUE, ifnull( my_count,0) feedback_receive
from table1 t1
left join (
select FEEDBACK_ID, count(*) as my_count
from table 2
group by FEEDBACK_ID
) t on t1.ID = t.FEEDBACK_ID
等等。这个列表可能很长,有几千个项目。所以我必须将它分成最大块。 750项。
一个想法是编写一个自己的functoid,它分裂并返回一个loopable列表。也许它有点容易,我可以在脚本functoid中直接做。但是我得到了信息
'123','456','789'
所以我不认为这是可能的。是否有可能在Scripting functoid中进行,或者我是否需要自己的functoid?
我一方面需要分割值来创建多个结果行(通过循环),还需要每行中的值本身。
提前致谢。
答案 0 :(得分:0)
在Scripting functoid中使用内联XSLT调用模板,您可以执行以下操作。
Functoid 1(独立):
<xsl:template name="SplitValues">
<xsl:param name="value" />
<xsl:variable name="part" select="substring-before($value, ',')" />
<xsl:if test="$part != ''">
<v><xsl:value-of select="$part" /></v>
<xsl:call-template name="SplitValues">
<xsl:with-param name="value" select="substring-after($value, ',')" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Functoid 2:
<xsl:variable name="split">
<xsl:call-template name="SplitValues">
<xsl:with-param name="value" select="$value" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name="set" select="msxsl:node-set($split)" />
<xsl:variable name="size" select="750" />
<xsl:for-each select="$set/v[position() mod $size = 1]">
<xsl:variable name="start" select="(position() - 1) * $size + 1" />
<LineValue>
<xsl:value-of select="text()" />
<xsl:for-each select="$set/v[position() > $start and position() < $start + $size]">
<xsl:text>,</xsl:text>
<xsl:value-of select="text()" />
</xsl:for-each>
</LineValue>
</xsl:for-each>
</xsl:template>
输入[0]:
'123','456','789'
节点
答案 1 :(得分:0)
我会使用不同的方法。我没有尝试在Xsl中进行限制循环,而是在C#函数中生成所有Xml,这非常简单。
步骤1,编写一些创建所需Xml输出的C#:
<LineValue>'1','2','3',...,'749','750'</LineValue>
<LineValue>'751','752','753',...,'1499','1500'</LineValue>
<LineValue>'1501','1502','1503',...,'2249','2250'</LineValue>
外部装配通常是首选,但内联工作也一样。但是,它确实没关系,只需将此Xml作为字符串返回。
第2步,你需要的唯一'技巧'是通过Xslt模板传递C#输出,因此它被视为Xml,而不是String内容。
<xsl:template name="MyXsltConcatTemplate">
<xsl:param name="param1" />
<xsl:element name="field">
<xsl:value-of select="$param1" disable-output-escaping="yes" />
</xsl:element>
</xsl:template>
disable-output-escaping =“yes”是让这项工作的原因。