postgresql 如何在postgres中为单个值输入多行?

jfewjypa  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(146)

我有一张table

CREATE TABLE test_tbl(id integer, num integer, name text);

字符串
其中数据被

INSERT INTO test_tbl (id, num, name)
VALUES(1, 2000, 'fdghgf'),(2, 3000, 'fdghg'),(3, 400, 'fhgf'),(4, 2200, 'dhgf');


我想将此数据插入另一个表tbl_bifuraction

CREATE TABLE tbl_bifuraction(id integer, num integer, name text, is_bifurcated integer);


以便当数量大于1000时,插入多行1000和剩余数量(当剩余数量为0时没有额外的行)。
插入的数据集应类似于:

id  num  name   is_bifurcated
1   1000 fdghgf 1
1   1000 fdghgf 1
2   1000 fdghg  1
2   1000 fdghg  1
2   1000 fdghg  1
3   400  fhgf   0
4   1000 dhgf   1
4   1000 dhgf   1
4   200  dhgf   1


fiddle链接是为bifuracted_query添加的

v2g6jxz6

v2g6jxz61#

关键是使用generate_series()执行横向连接,以便获得所需的结果行数:

SELECT t.id,
       CASE WHEN (g.c + 1) * 1000 > t.num
            THEN t.num - g.c * 1000
            ELSE 1000
       END AS num,
       t.name,
       CAST(t.num > 1000 AS integer) AS is_bifurcated
FROM test_tbl AS t
   CROSS JOIN LATERAL generate_series(0, (num - 1) / 1000) AS g(c);

 id │ num  │  name  │ is_bifurcated 
════╪══════╪════════╪═══════════════
  1 │ 1000 │ fdghgf │             1
  1 │ 1000 │ fdghgf │             1
  2 │ 1000 │ fdghg  │             1
  2 │ 1000 │ fdghg  │             1
  2 │ 1000 │ fdghg  │             1
  3 │  400 │ fhgf   │             0
  4 │ 1000 │ dhgf   │             1
  4 │ 1000 │ dhgf   │             1
  4 │  200 │ dhgf   │             1
(9 rows)

字符串

相关问题