年間テーブルのデータを 1 つの大きなテーブルにマージする必要があります。これに動的SQL(またはその他)をどのように使用する必要があるかについて混乱しています。
これはすべて、SQL 2008 標準に準拠した MonetDB にあると思います。ただし、パーティション分割がサポートされているかどうかはわかりません。いずれにせよ、テーブルをマージしたいと思います。
The Curse and Blessings of Dynamic SQLSELECT * FROM sales + @yymm
での議論は、最終的に解決策について言及していません。
DBA に関する彼の回答の下のコメントで、MonetDB の専門家から関連する部分についていくつかのガイダンスを受け取りましたが、何年にもわたるループはなく、まだ必要です。
…のようCIVIL_1969
なテーブルを持つデータを考えてみてください。これらは通常、同じスキーマに従いますが、列はありません。列もある単一のテーブルが必要です。CIVIL_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;