Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从原始表创建新表结构_Sql_Postgresql_Pivot_Postgresql 9.2 - Fatal编程技术网

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#动态构建了我的语句,并发挥了魅力。