我有一张 table :

Table_Name: price_list
---------------------------------------------------
| id | price_type_a | price_type_b | price_type_c |
---------------------------------------------------
| 1  |    1234      |     5678     |     9012     |
| 2  |    3456      |     7890     |     1234     |
| 3  |    5678      |     9012     |     3456     |
---------------------------------------------------

我需要在Postgres中进行选择查询,其结果如下:
---------------------------
| id | price_type | price |
---------------------------
| 1  |  type_a    | 1234  |
| 1  |  type_b    | 5678  |
| 1  |  type_c    | 9012  |
| 2  |  type_a    | 3456  |
| 2  |  type_b    | 7890  |
| 2  |  type_c    | 1234  |
...

任何对链接到类似示例的帮助都将不胜感激。

最佳答案

将带有SELECT的单个LATERAL加入VALUES表达式即可完成此工作:

SELECT p.id, v.*
FROM   price_list p
     , LATERAL (
   VALUES
      ('type_a', p.price_type_a)
    , ('type_b', p.price_type_b)
    , ('type_c', p.price_type_c)
   ) v (price_type, price);

有关的:
  • Convert one row into multiple rows with fewer columns
  • SELECT DISTINCT on multiple columns
  • 关于sql - Postgres : convert single row to multiple rows (unpivot),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47077068/

    10-11 15:47