我正在尝试在Postgres 8.2中编写一个函数,该函数将分析我们用于报告目的的数据集中的4个特定列,然后返回用特定文本对记录进行分类的文本。
在我们旧的报告环境中,我会利用报告工具(Crystal Reports)来计算这个,但我收到的指令是它应该作为数据库中的函数来完成。
这是我想要做的一个例子(请原谅错误,我还在学习基础知识)
CREATE FUNCTION fnc_Breakdown(character varying, character varying, character varying, character varying)
RETURNS character varying AS $$
DECLARE
breakdown character varying;
BEGIN
IF $1 in ('ABCD') THEN breakdown:= "CSS"
ELSE
IF $1 like ('DCA%) AND $2 IN ('District 123','District 124') and $3 IN ('
THEN breakdown:= "FAB"
ELSE breakdown:= "OTHERS"
END IF;
RETURN breakdown;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
答案 0 :(得分:0)
你的功能需要一些格式和分号,但总的来说它很好。我还建议一些友好的格式,记住你正在为不是电脑的人编写代码:
create or replace function fnc_Breakdown
(
character varying,
character varying,
character varying,
character varying
)
returns character varying as $$
declare
breakdown character varying;
begin
if $1 = 'ABCD' then
breakdown := 'CSS';
elseif $1 like 'DCA%' and $2 in ('District 123','District 124') then
breakdown:= 'FAB';
else
breakdown:= 'OTHERS';
end if;
return breakdown;
end;
$$ language plpgsql immutable;
实际上,这样一个简单的任务可以完全没有功能,只需要使用case表达式:
case
when a = 'ABCD' then
'CSS'
when a like 'DCA%' and b in ('District 123','District 124') then
'FAB'
else
'OTHERS'
end
请参阅sql fiddle demo来解决问题