postgresql字符串agg数值/整数输出结果错误

postgresql字符串agg数值/整数输出结果错误,sql,postgresql,string-aggregation,Sql,Postgresql,String Aggregation,正如标题所说,我需要使用这个查询(不带字符串agg)用字符串agg连接结果查询 结果就是这样 然后我添加字符串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=

正如标题所说,我需要使用这个查询(不带字符串agg)用字符串agg连接结果查询

结果就是这样

然后我添加字符串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

有什么想法吗?

这是因为您将数值转换为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

感谢下面的评论者对答案的贡献

这是因为您将数值转换为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

感谢下面的评论者对答案的贡献

或直接转换到
::text
或直接转换到
::text