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