在PostgreSQL 8.4中是否有一种方法可以使用表格单元格内容作为结果中的列名称(例如,作为别名)?

时间:2013-07-14 06:22:50

标签: sql postgresql one-to-many postgresql-8.4

我有一对多的关系。我有三张桌子:

|A       |  | B                |  |C      |
|ID| ... |  |ID|A_ID|C_ID|VALUE|  |ID|NAME|
|1 |     |  |1 |1   |2   |val_1|  |1 |a   |
|2 |     |  |2 |1   |1   |val_2|  |2 |b   |
|3 |     |  |3 |2   |1   |first|  |
...

我需要得到一个结果表:

|ID|a    |b    |
|1 |val_2|val_1|
|2 |NULL |NULL |
|3 |first|NULL |

即,第一列是A.ID,其他列是B的VALUE列,但这些列的名称是C中的NAME。

我的一个想法是查询

SELECT A.ID, B.VALUE AS C.NAME FROM A, B, C WHERE B.A_ID = A.ID AND B.C_ID = C.ID

但我有:

ERROR:  syntax error at or near "."

有人知道如何使用PostgreSQL 8.4中的一个查询解决问题吗?

1 个答案:

答案 0 :(得分:2)

看起来您需要“交叉表”或“数据透视”查询。有关对此有帮助的功能,请参阅tablefunc模块,并搜索[postgresql] crosstab[postgresql] pivot的堆栈溢出。

SQL不允许您像上面所写的那样使用列引用作为列别名。它不是有效的语法,并且在使其工作时存在一些逻辑问题。