带有元素号的PostgreSQL unnest()

带有元素号的PostgreSQL unnest()

当我有一个带有分隔值的列时,我可以使用unnest()职能:


myTable

id | elements

---+------------

1  |ab,cd,efg,hi

2  |jk,lm,no,pq

3  |rstuv,wxyz


select id, unnest(string_to_array(elements, ',')) AS elem

from myTable


id | elem

---+-----

1  | ab

1  | cd

1  | efg

1  | hi

2  | jk

...

如何包括元素编号?即:


id | elem | nr

---+------+---

1  | ab   | 1

1  | cd   | 2

1  | efg  | 3

1  | hi   | 4

2  | jk   | 1

...

我想要原始位置源字符串中的每个元素。我试过使用窗口函数(row_number(), rank()(等等)但我总是1..也许是因为它们在源表的同一行中?


我知道这是个糟糕的桌子设计。不是我的,我只是想修好它。


宝慕林4294392
浏览 2284回答 3
3回答

慕的地8271018

试着:select v.*, row_number() over (partition by id order by elem) rn from(select     id,     unnest(string_to_array(elements, ',')) AS elem from myTable) v
打开App,查看更多内容
随时随地看视频慕课网APP