在使用过程中,由于数据随年份的变化数据会发生变化 ,现在需要每次统计时将数据汇总统计。

表名结构如下:

  • unionall_table_2021
  • unionall_table_2022
  • unionall_table_2020

1. 将每年的数据显示union all拼接

create view vw_unionall_table
as
select * from unionall_table_2020
union all 
select * from unionall_table_2021
union all 
select * from unionall_table_2022

2. 使用存储过程,动态构建查询

CREATE OR REPLACE FUNCTION get_unionall_table()
  RETURNS TABLE("objectid" int4, "f_tbbh" varchar, "f_dlbm" varchar, "f_area" numeric, "f_xzqdm" varchar, "f_year" int4) AS $BODY$
DECLARE
	sqlSearch TEXT DEFAULT '';
rec_data RECORD;
cur_data REFCURSOR;
cur_tablename TEXT;
BEGIN-- Open the cursor
	OPEN cur_data FOR SELECT
	tablename 
	FROM
		pg_tables 
	WHERE
		tablename LIKE'unionall_table_%' 
		AND LENGTH ( tablename ) = LENGTH ( 'unionall_table_xxxx' );
	FETCH cur_data INTO rec_data;
	while
	FOUND
		LOOP-- fetch row into the film
		cur_tablename := rec_data.tablename;
	FETCH NEXT 
	FROM
		cur_data INTO rec_data;
	sqlSearch := sqlSearch || ' select objectid, f_tbbh,f_dlbm,f_area,f_xzqdm,f_year from ' || cur_tablename || ' union all ';
	
END LOOP;
-- Close the cursor
CLOSE cur_data;
sqlSearch := substr( sqlSearch, 1, "length" ( sqlSearch ) - LENGTH ( 'union all ' ) );
RETURN query EXECUTE sqlSearch;
END; $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000
create view vw_unionall_table
as
select get_unionall_table();
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐