繁体   English   中英

SQL 从一个查询中获取结果作为另一个查询的列

[英]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

其中node1node3来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM