在postgresql上获取一行的多个值

Get multiple values for one row on postgresql

我有一个 table 有多个日期和一个 ID 以及许多字符串。每个ID有多个日期和字符串,但只有一个ID。

我想获取一个 ID(例如 ID=INI111)的所有日期值,并将每个日期作为单个值获取。我的意思是,我不希望所有日期都在一行中,我希望每个日期一行。我也想要这个带字符串,但重要的是日期。

当我说"row"我的意思是查询结果。

例如:

数据:

ID ----------- Date1 ---------- String1 ---------- Date2 ----------- String2 ----- Date3 ------- String 3 INI100------- 2020/02/02 ---- aaaaa -------- 2020/02/03 ------- bbbbb ---- 2020/02/04--cccccc

输出:

  1. 2020/02/02
  2. aaaaa
  3. 2020/02/03
  4. bbbbb
  5. 2020/02/04
  6. ccccc

谁能帮帮我?非常感谢!

您似乎想要对数据集进行逆透视。在 Postgres 中,您可以使用横向连接来做到这一点:

select v.*
from mytable t
cross join lateral(
    values(id, date1::text), (id, string1), (id, date2::text), (id, string2)
) v(id, val)

请注意,这需要调整生成列中的数据类型(查询将日期转换为字符串)。

Demo on DB Fiddle:

id     | val       
:----- | :---------
INI100 | 2020-02-02
INI100 | aaaaa     
INI100 | 2020-02-03
INI100 | bbbbb