我正在Postgres中编写一个select语句,其中包含case语句如下:
,(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
我收到以下错误。我尝试使用IS
代替=
,但没有效果。如果没有这两个case
语句,查询就会完美运行。
错误:CASE类型字符变化,数字不能与SQL匹配 州:42804
答案 0 :(得分:15)
case
表达式的所有分支都应返回相同的数据类型。实现这一目标的一种方法是在需要的地方明确投射:
,(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 -----------------------------------------------^
答案 1 :(得分:0)
SELECT "table","schema",
CASE
WHEN "size" <= 1024 Then SIZE::varchar || 'MB'
WHEN "size" > 1024 AND "size" < 1000000 Then ("SIZE"/1024)::varchar || 'GB'
WHEN "size" > 1000000 THEN ("SIZE"/1024)/1024::varchar || 'TB'
END size
FROM SVV_TABLE_INFO
order by 1;