簡體   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