2017-01-24 3 views
0

Я хотел бы создать отчет на основе нескольких переменных, один из которых - месяцы в году. Я хотел бы создать временную таблицу, содержащую только нужные периоды. Вот что я придумал:Postgres: Динамическое создание таблицы временных таблиц

The части У меня возникли проблемы с помещены между < < и >>

DO $$ 
DECLARE myPeriodFrom INTEGER := 7; 
DECLARE myPeriodTo INTEGER := 9; 
DECLARE myColumn VARCHAR(255) := 'Period'; 
BEGIN 
    DROP TABLE IF EXISTS tmpTable; 
    CREATE TABLE tmp_table (tmpId INT, tmpDesc varchar(255)); 
    FOR i IN myPeriodFrom..myPeriodTo LOOP 
     -- Create dynamic column name and fill with data 
     << code here >> -- myColumn := (myColumn || CAST(i AS VARCHAR)); 
     ALTER TABLE tmpTable ADD COLUMN <<myColumn>> INT; 
     INSERT INTO tmpTable (myId, myColumn) 
      SELECT "Id", "YearAdded" FROM "Item" WHERE "Item"."MonthAdded" = i; 
    END LOOP; 

END $$; 
SELECT * FROM tmpTable 
+1

Почему вы используете временную таблицу, когда 'generate_series()' вероятно делает то, что вы хотите? –

+0

Не совсем, 'generate_series()' не совсем делает трюк. Все еще нужны столбцы. Когда это работает, другие вычисления должны выполняться в 'SELECT'. Спасибо хоть. – Remco

ответ

0

С небольшим сожалением я боюсь сделать вывод о том, что я хочу, не возможное. Нет реального реального решения динамического создания столбцов. Во-вторых, приложение, в котором я использую запрос, оказывается не для поддержки запросов с динамическим выходом. По этим причинам мне пришлось переосмыслить весь мой подход.

Для тех, кто его прочитал и дал предложение, спасибо.