group_concat in Informix

ぐ巨炮叔叔 提交于 2019-11-29 08:20:52

You would have to define a user-defined aggregate to do this. That has four parts - four functions (search for CREATE AGGREGATE in the IDS 12.10 Info Centre):

  1. Initializer (INIT)
  2. Iterator (ITER)
  3. Combine (COMBINE)
  4. Finalizer (FINAL)

That's the official terminology in capitals, and it is moderately intuitive. Think of calculating an average.

  1. Initializer: set sum = 0; N = 0
  2. Iterator: set sum += x; N++
  3. Combiner: set sum = sum1 + sum2; set N = N1 + N2
  4. Finalizer: result = sum / N -- with N=0 (zero-divide) checks

The combiner is used to combine intermediate results from parallel execution; each parallel execution starts with the iterator and generates intermediate results. When the parallel execution completes, the separate sets of values are combined with the combiner.

You can write analogous code in IDS - using stored procedures or C or Java UDRs.

See the SO question Show a one to many relationship as 2 columns — 1 unique row (ID & comma separated list) for a string-based GROUP_CONCAT() function implemented in Informix.

There is certainly no built-in function in Informix to do this. Does any other mainstream RDBMS have such a bizarre aggregate function? Ordering by a column not selected in a query is a bit dubious, but grouping? That's a new one on me.

You would have to write a stored procedure or UDR to generate such a dataset. To be honest, I wouldn't attempt this in the database. It looks like a task best suited to the consumer of this output (ie the application/webapp/report-writer etc).

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!