SQL获得从一个查询结果到另一个查询
问题描述:
让列说,我有这两个表:SQL获得从一个查询结果到另一个查询
CREATE TABLE nodes
(
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE events
(
id INTEGER PRIMARY KEY,
node INTEGER REFERENCES nodes,
etime TIMESTAMP,
value TEXT
);
有一个查询来获取从nodes
表中的值作为对events
表列?
举个简单的例子,我想是这样的:
node1 | node2 | node3
-------+--------+--------
event1 | |
| event2 |
| | event3
这可能吗?
我真的想什么,将是一个SQL查询,可以输出是这样的:
etime | node1 | node2 | node3
--------------------+---------+---------+--------
2011-04-26 13:12:23 | Event 1 | | Event 2
2011-04-26 15:52:43 | | Event 3 |
2011-04-26 21:35:12 | Event 4 | Event 5 | Event 6
凡node1
到node3
来自node
表,时间戳和Event
文本来自events
表。
答
这称为交叉表或数据透视查询,并且没有符合SQL的方法来生成一个。
快速谷歌搜索说有contrib module for PostgreSQL(看起来像in core now)。
另一个非常有趣的blog post here(首先在谷歌) - 虽然它不是完全交叉表,因为它有固定的列数。
答
使用分组和汇总的CASE表达式:
SELECT
e.etime,
MIN(CASE n.name WHEN 'node1' THEN e.value END) AS node1,
MIN(CASE n.name WHEN 'node2' THEN e.value END) AS node2,
MIN(CASE n.name WHEN 'node3' THEN e.value END) AS node3
FROM events e
INNER JOIN nodes n ON e.node = n.id
GROUP BY
职能交叉家人看好。我将不得不尝试一点。 – 2011-04-27 14:36:06