添加分组行现有查询的逗号分隔值(Add comma-separated value of group

2019-10-19 02:04发布

我已经得到了报告认为,这看起来是这样的:

SELECT
  a.id,
  a.value1,
  a.value2,
  b.value1,
  /* (+50 more such columns)*/
FROM a
JOIN b ON (b.id = a.b_id)
JOIN c ON (c.id = b.c_id)
LEFT JOIN d ON (d.id = b.d_id)
LEFT JOIN e ON (e.id = d.e_id)
/* (+10 more inner/left joins) */

它加入了不少表,并返回大量列,但指标已经到位,性能优良。

现在我想另一列添加到结果,显示

  • 逗号分隔值
  • 按值排序
  • 从数据表Y
  • 外通过交点表X接合
  • 如果a.value3 IS NULL ,否则采取a.value3

用英文逗号分隔我用的是分组值汤姆凯特的stragg ,可以使用COLLECT更高版本。

对于SELECT伪代码是这样说:

SELECT xx.id, COALESCE( a.value3, stragg( xx.val ) ) value3
FROM (
  SELECT x.id, y.val
  FROM x
  WHERE x.a_id = a.id
  JOIN y ON ( y.id = x.y_id )
  ORDER BY y.val ASC
) xx
GROUP BY xx.id

什么是做到这一点的最好方法是什么? 有小费吗?

Answer 1:

甲骨文11.2.x有一个新的功能LISTAGG。 也许这个新功能是到达太晚了吗?

示例(从TK奥拉MAG):

SQL> select deptno,
  2         listagg( ename, '; ' )
  3         within group
  4         (order by ename) enames
  5     from emp
  6    group by deptno
  7    order by deptno;

  DEPTNO   ENAMES
---------  --------------------
  10       CLARK; KING; MILLER
  20       ADAMS; FORD; JONES;
           SCOTT; SMITH

  30       ALLEN; BLAKE;
           JAMES; MARTIN;
           TURNER; WARD


Answer 2:

u能正好连接所有列,使用||“” ||。 乌拉圭回合查询,

a.id || '' || a.value1 || '' || a.value2 || '' || b.value1 || '' || / *(50更多个这样的列)* / FROM A JOIN B ON(b.id = a.b_id)JOIN C ON(c.id = b.c_id)LEFT JOIN D ON(d.id = b.d_id) LEFT JOIN E对(e.id = d.e_id); 西港岛线这给ü在.csv格式逗号。 或U可以使用像DBVisualizer中的任何工具或执行qyery。



文章来源: Add comma-separated value of grouped rows to existing query