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