在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
输出:
- 2020/02/02
- aaaaa
- 2020/02/03
- bbbbb
- 2020/02/04
- ccccc
谁能帮帮我?非常感谢!
您似乎想要对数据集进行逆透视。在 Postgres 中,您可以使用横向连接来做到这一点:
select v.*
from mytable t
cross join lateral(
values(id, date1::text), (id, string1), (id, date2::text), (id, string2)
) v(id, val)
请注意,这需要调整生成列中的数据类型(查询将日期转换为字符串)。
id | val
:----- | :---------
INI100 | 2020-02-02
INI100 | aaaaa
INI100 | 2020-02-03
INI100 | bbbbb
我有一个 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
输出:
- 2020/02/02
- aaaaa
- 2020/02/03
- bbbbb
- 2020/02/04
- ccccc
谁能帮帮我?非常感谢!
您似乎想要对数据集进行逆透视。在 Postgres 中,您可以使用横向连接来做到这一点:
select v.*
from mytable t
cross join lateral(
values(id, date1::text), (id, string1), (id, date2::text), (id, string2)
) v(id, val)
请注意,这需要调整生成列中的数据类型(查询将日期转换为字符串)。
id | val :----- | :--------- INI100 | 2020-02-02 INI100 | aaaaa INI100 | 2020-02-03 INI100 | bbbbb