web-dev-qa-db-fra.com

ERREUR: les types CASE varient en caractères et les chiffres ne peuvent pas être mis en correspondance

J'écris une déclaration sélective dans Postgres qui contient une déclaration de cas comme suit:

,(case when all_loc.country = 'DE' then msc_si.buyer_id else msc_si.buyer_name end) as "purchasing_group_name_buyer_name"  --story
,(case when all_loc.country = 'DE' then msc_si.planner_code else mscp.description end) as "mrp_controller_name"                --story

Je reçois l'erreur suivante. J'ai essayé avec IS au lieu de =, n'a pas fonctionné. Sans ces deux instructions case, la requête fonctionne parfaitement.

ERREUR: les types de CAS varient en caractères et les nombres ne peuvent pas être mis en correspondance État SQL: 42804

11
Abhijit

Toutes les branches d'une expression case doivent renvoyer le même type de données. Une façon d'y parvenir est de lancer explicitement le cas échéant:

,(case when all_loc.country = 'DE' then msc_si.buyer_id::varchar else msc_si.buyer_name end) as "purchasing_group_name_buyer_name"
-- Here -----------------------------------------------^
,(case when all_loc.country = 'DE' then msc_si.planner_code::varchar else mscp.description end) as "mrp_controller_name"
-- And gere -----------------------------------------------^
19
Mureinik