0

我需要将年度表中的数据合并到一个大表中。我对应该如何使用动态 SQL(或其他)感到困惑。

所有这些都在 MonetDB 中,我认为它遵循 SQL 2008 标准。我不确定它们是否支持分区,无论如何我宁愿合并我的表。

The Curse and Blessings of Dynamic SQLSELECT * FROM sales + @yymm中的讨论最后没有提到解决方案。

我从 MonetDB 专家那里收到了一些关于相关文章的指导,在他对 DBA 的回答下方的评论中,但多年来没有循环,我仍然需要。

想想我的数据有这样的表格CIVIL_1969CIVIL_1970......。CIVIL_2012这些通常遵循相同的模式,但没有year列。我想要一个CIVIL表,还有一个year列。

顺便说一句,有些表的架构每年都会发生变化(例如,不同年份的税表收集了不同的记录)。是否也可以合并这些表?当然,有些列的记录很少,丢失了很多年。

一些非常试探性的伪代码:

USE dbfarm
DECLARE @i INT
SET @i = 1990
SELECT name FROM tables WHERE name LIKE 'data_@i';
WHILE @i < 2013
DO
    ALTER TABLE data_@i ADD COLUMN "year" INTEGER; UPDATE data_@i SET "year" = @i;
    SET @i = @i +1
END WHILE
CREATE TABLE data AS SELECT * FROM data_1990 UNION ALL SELECT * FROM data_1991 UNION ALL [...] WITH DATA;
4

1 回答 1

1

我不知道 monetdb,但我认为他们支持观点。一种方法是创建一个描述数据合并的视图,然后使用它插入表中。IE:

create view v as (
    select 1969 as year, c1, c2, ..., cn, cast(null as ...) -- col introduced in 1973
         , cast(null as ...) -- col introduced in 1987
    union all 
    ...
    select 1973 as year, c1, c2, ..., cn, cn_1, , cast(null as ...) -- introduced in 1987   
    union all
    ...
)

insert into data (...) select ... from v;
于 2014-05-17T21:26:08.647 回答