我想根据几个变量创建一个报告,其中一个变量是一年中的月份。我想创建一个仅包含所需时间段的临时表。这是我想到的:
我遇到问题的部件放置在<<和>>之间
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
带着一点遗憾,我不敢断定我想要的是不可能的。动态创建列没有真正可行的解决方案。其次,我正在使用查询的应用程序不支持具有动态输出的查询。出于这些原因,我不得不重新考虑我的整个方法。
对于那些阅读并提出建议的人,谢谢。