[英]SQL to get result from one query as columns to another query
假设我有这两个表:
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 查询,它可以 output 是这样的:
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
表。
这称为交叉表或 pivot 查询,并且没有符合 SQL 的方法来生成查询。
快速谷歌搜索说PostgreSQL 有一个贡献模块(现在看起来像在核心中)。
另一个非常有趣的博客文章在这里(首先在谷歌) - 虽然它不是完全交叉表,因为它有固定数量的列。
对 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.