Sql 从原始表创建新表结构
我有一个名为Sql 从原始表创建新表结构,sql,postgresql,pivot,postgresql-9.2,Sql,Postgresql,Pivot,Postgresql 9.2,我有一个名为TrainingMatrix的表,定义如下: CREATE TABLE TrainingMatrix ( "ID" text NOT NULL, "TrainingName" text NOT NULL, "Institute" text, "ExpiryDate" date, CONSTRAINT "TrainingMatrix_pkey" PRIMARY KEY ("ID", "TrainingName", "ExpiryDate") ) 一些虚拟数据如下表
TrainingMatrix
的表,定义如下:
CREATE TABLE TrainingMatrix
(
"ID" text NOT NULL,
"TrainingName" text NOT NULL,
"Institute" text,
"ExpiryDate" date,
CONSTRAINT "TrainingMatrix_pkey" PRIMARY KEY ("ID", "TrainingName", "ExpiryDate")
)
一些虚拟数据如下表所示:
可以找到可编辑和可测试的数据(SQL FIDLE)
我正在尝试编写SQL语句,它可以重新生成如下表:
<原始代码>代码>训练矩阵< /代码>中的<代码>训练名称< /代码>列可以取任何值,每当添加一个新值如<代码> Tx <代码>时,第二个预期表必须将此值视为一个新列如下:
CREATE TABLE TrainingMatrix
(
"ID" text NOT NULL,
"TrainingName" text NOT NULL,
"Institute" text,
"ExpiryDate" date,
CONSTRAINT "TrainingMatrix_pkey" PRIMARY KEY ("ID", "TrainingName", "ExpiryDate")
)
我正在使用PostgreSQL 9.2。感谢您的帮助,这是提供测试数据的最佳形式 我无法在SQLfiddle上演示工作解决方案,因为无法在那里安装其他模块。这可能会在将来起作用,与Jake Feasel(该网站的创建者)的讨论正在进行中,是否需要安装更多选定的附加模块 无论如何,此查询会按要求执行(在Postgres 9.3上测试): 您可以在这个相关的答案中找到详细的解释:
对于动态版本,请考虑这个相关的答案:
1.)构建语句本身(在上面链接的第二个答案处编码)。
2.)执行它。查看模块中的
crosstab()
函数我们非常喜欢以我们可以使用的形式测试数据,而不是图像。请尝试,或者至少粘贴文本。@ErwinBrandstetter是否有办法将表格粘贴为具有可读视图的文本?您能帮忙吗?@ErwinBrandstetter这里有一个到sqlfiddle的链接:@ErwinBrandstetter我已经添加了sqlfiddle链接。这是我第一次了解sqlfidle:)。如果将新的不同trainingName值添加到orgianl表中,会不会将其动态添加到新表中?@Aan:不会。您必须为此类需求动态生成语句。SELECT
语句要求预先定义列。(SELECT*
从系统目录中获取此信息。)实际上,这是我问题的核心。如何将trainingName
值动态添加到新表中。如果您可以编辑您的答案以满足此要求,我将非常感谢:)@Aan:我添加了更多关于动态交叉表查询的内容。感谢您的帮助,我通过c#动态构建了我的语句,并发挥了魅力。