在Informix的sql中查找将模拟MysqL的group_concat函数的查询.
MysqL的group_concat所做的是它创建了组中所有成员的枚举.
所以数据如下:
orderid:itemName:price 1:Paper :10 1:Pen :5 2:Sugar :15
以及以下查询:
select group_concat(itemName),sum(price) from order_details group by orderid
会产生:
items :price Paper,Pen:15 Sugar :15
在Informix中实现这一目标的最有效方法是什么?我们肯定要使用存储过程吗?
解决方法
您必须定义用户定义的聚合才能执行此操作.这有四个部分 – 四个功能(在
IDS 12.10 Info Centre中搜索
CREATE AGGREGATE):
>初始化程序(INIT)
>迭代器(ITER)
>组合(COMBINE)
>终结者(最终)
这是首都的官方术语,它具有中等直观性.考虑计算平均值.
>初始化程序:设置sum = 0; N = 0
>迭代器:设置sum = x; ñ
>组合器:设置sum = sum1 sum2;设置N = N1 N2
>终结器:结果= sum / N – N = 0(零除)检查
组合器用于组合并行执行的中间结果;每个并行执行都从迭代器开始,并生成中间结果.当并行执行完成时,单独的值集合与组合器组合.
您可以在IDS中编写类似的代码 – 使用存储过程或C或Java UDR.
有关在Informix中实现的基于字符串的GROUP_CONCAT()函数,请参阅SO问题Show a one to many relationship as 2 columns — 1 unique row (ID & comma separated list).