我有一个表 Goods,存储商品的 id、批次和类型。多个ID的货物属于不同类型但属于同一批次,所以记录在一起。
id | 批量 | 类型 |
---|---|---|
123,124,128 | 1 | A、B、C |
456,555 | 2 | C |
678 | 3 | A、B |
我现在想要如下的结果,即将用逗号分隔的数据分成多行(我使用的是PieCloudDB数据库),有什么办法可以实现吗?
id | 批量 | 类型 |
---|---|---|
123 | 1 | A |
123 | 1 | B |
123 | 1 | C |
124 | 1 | A |
124 | 1 | B |
124 | 1 | C |
128 | 1 | A |
128 | 1 | B |
128 | 1 | C |
456 | 2 | C |
555 | 2 | C |
678 | 3 | A |
678 | 3 | B |
你可以使用PostgreSQL函数
unnest()
和string_to_array()
来实现这一点。(我搜索发现pieclouddb与PostgreSQL兼容,我认为这个方法应该有用)
WITH SplitIDs AS (
SELECT unnest(string_to_array(id, ',')) AS id, batch
FROM goods
),
SplitTypes AS (
SELECT unnest(string_to_array(type, ',')) AS type, batch
FROM goods
)
SELECT t1.id AS id, t1.batch, t2.type AS type
FROM SplitIDs t1
JOIN SplitTypes t2 ON t1.batch = t2.batch
ORDER BY id, type