问题描述
我需要从具有全名的列中查询名字(子字符串)。为了收集统计信息,我需要在这个拳头名称有多个时分开,然后,我需要查询下一个名字。
像这样:
SELECT
CASE
WHEN (SELECT
count(substring(nome,position(' ' in nome))) as quantidade
FROM usuarios
GROUP BY substring(nome,position(' ' in nome))
) > 1
THEN substring(t.nome,position(' ' in t.nome))||' '||split_part(t.nome,' ',2)
ELSE substring(t.nome,position(' ' in t.nome))
END AS "Colaborador",
但是我可以这样做,因为我的结果是
子查询返回的一行以上
但是是的,它将返回多个行
我不知道该怎么做。
在此先感谢您的帮助
解决方法
使用窗口功能:
SELECT CASE WHEN cnt = 1
THEN split_part(nome,' ',1)
ELSE split_part(nome,1) || ' ' || split_part(nome,2)
END
FROM (SELECT t.nome,count(*) OVER (PARTITION BY split_part(t.nome,1)) AS cnt
FROM atable) AS subq;