postgresql string agg数字/整数输出结果错误

时间:2017-03-14 03:20:34

标签: sql postgresql string-aggregation

正如标题所说,我需要使用此查询(无字符串聚合)将结果查询与字符串agg连接

select pdet.dept_id, pdet.grade_id
from psa_aso_target ptar
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'

结果就是这个

result

然后我添加字符串agg

select pdet.dept_id, string_agg(distinct pdet.grade_id::char,'|') as grade
from psa_aso_target ptar
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'
group by pdet.dept_id

我希望结果结果是

dept_id | grade_id
      2 | 1|2|3
      3 | 4|13|14|15|18
      5 | 6|10|17
     63 | 2|4|7

但我得到的结果是

dept_id | grade_id
      2 | 1|2|3
      3 | 1|4
      5 | 1|6
     63 | 2|4|7

任何想法?

1 个答案:

答案 0 :(得分:2)

这是因为您将数值转换为char(1)。通过将它转换为char(1),您只将值截断为1个字符,因此13,14,15,18全部变为1

您需要将其强制转换为varchar或text:

select pdet.dept_id, string_agg(distinct pdet.grade_id::varchar,'|') as grade
from psa_aso_target ptar
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'
group by pdet.dept_id

select pdet.dept_id, string_agg(distinct pdet.grade_id::text,'|') as grade
from psa_aso_target ptar
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'
group by pdet.dept_id

感谢下面的评论者为答案做出贡献