需要查TD的表实现这个需求
-->
查了一下有说用 TDStats.udfConcat 的,试了一下 可能没有这个函数的权限用不了.
后来找到了 XMLAGG函数,给的样例是下面这样的
select
RQ,
TRIM(TRAILING ',' FROM (XMLAGG(JX || ',')(VARCHAR(500))))
from table
group by RQ
拆解分析步骤如下:
1 核心函数:XMLAGG([要拼接的字段])
select
RQ,XMLAGG(JX)
from table
group by RQ
查询报错了 , 错误分析原因为 XML类型是LOB类型,最多一行占用4096个字节 , 不能直接显示为LOB类型,
手动将JX这列格式化成varchar , 使用cast(xxx as varchar(500))
select
RQ,cast(XMLAGG(JX) as varchar(500))
from table
group by RQ
结果报错 : 强制转换函数的参数必须具有相同的字符数据类型。
在后面加上(VARCHAR(500)) , (PS:不知道为什么cast不行 留个坑以后填)
select
RQ,XMLAGG(JX)(VARCHAR(500))
from dm_dp_hb_hxhb
group by RQ
查询结果为:
想把中间的空格替换掉 ,改成逗号 , 没找到对应的方法 , XMLAGG参考里也没有 (留个坑以后填)
所以先在值的后面手动拼接一个 "," , SQL如下
select
RQ,XMLAGG(JX || ',')(VARCHAR(500))
from (select distinct RQ,JX from dm_dp_hb_hxhb)t
group by RQ
查询结果为:
2 TRIM去掉最后的逗号
TRIM(TRAILING ',' FROM ( ))
TRIM ( [ [位置] [要移除的字串] FROM ] 字串): [位置] 的可能值为 LEADING (起头), TRAILING (结尾), or BOTH (起头及结尾)。 这个函数将把 [要移除的字串] 从字串的起头、结尾,或是起头及结尾移除。如果我们没有列出 [要移除的字串] 是什么的话,那空白就会被移除。
最终SQL为:
select
RQ,TRIM(TRAILING ',' FROM (XMLAGG(JX || ',')(VARCHAR(500))))
from table
group by RQ
TDStats.udfConcat 参考:
https://blog.csdn.net/weixin_30896763/article/details/95514322
XMLAGG参考
TRIM参考
https://www.1keydata.com/cn/sql/sql-trim.php
ORACLE-XMLAGG参考