我正在尝试查询一个包含很多列(如 debMonth1、debMonth2 等)的表,以获得满足需要处理数据的应用程序需求的结果。
从语法上看,查询现在似乎没问题,但我没有从中得到结果。它只是继续没有错误。
我想我在列名方面遇到了问题?谁能帮帮我?
DO $do$
DECLARE cmonth TEXT;
DECLARE dmonth TEXT;
BEGIN
FOR i IN 1..15 LOOP
cmonth = CONCAT('"credMonth' , i::text, '"');
dmonth = CONCAT('"debMonth' , i::text, '"');
EXECUTE
format('SELECT
"account", "FY", "setOfBooks", $1, $2, $3 AS "fiscalMonth"
FROM
"transaction_figures"
WHERE
"dataType" = ''(80)'' AND
($1 != ''0.00'' OR $2 != ''0.00'')')
USING cmonth, dmonth, i;
END LOOP;
END
$do$ LANGUAGE plpgsql;
最佳答案
在 plpgsql 中执行的查询不会导致打印其输出或发送给客户端。您必须迭代结果并对它做一些事情,例如:
DO $do$
DECLARE cmonth TEXT;
DECLARE dmonth TEXT;
DECLARE r RECORD;
BEGIN
FOR i IN 1..15 LOOP
cmonth = CONCAT('"credMonth' , i::text, '"');
dmonth = CONCAT('"debMonth' , i::text, '"');
FOR r in
EXECUTE
format('SELECT
"account", "FY", "setOfBooks", $1, $2, $3 AS "fiscalMonth"
FROM
"transaction_figures"
WHERE
"dataType" = ''(80)'' AND
($1 != ''0.00'' OR $2 != ''0.00'')')
USING cmonth, dmonth, i
LOOP
RAISE NOTICE '%', r;
END LOOP;
END LOOP;
END
$do$ LANGUAGE plpgsql;
这将在 psql 中打印结果。如果你想让数据表现得像表(即发送给客户端),你必须将你的代码包装在 plpgsql 函数中并返回查询结果。
关于postgresql - 具有动态列名的 Postgres 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302940/