POSTGRES 根据值 n 生成 n 行

bal*_*ick 2 sql postgresql

我需要在 postgres 中生成一个视图,其中包含基于列中的n值的行。n

让我们举个例子。我有一个这样的表:

   A*  |  B   |  C
 --------------------
  abc  |  def |  4
  ghi  |  jkl |  7
Run Code Online (Sandbox Code Playgroud)

我需要生成一个如下所示的视图:

   A  |  B   |  C
------------------------
  abc  |  def |  4
  abc  |  def |  4
  abc  |  def |  4
  abc  |  def |  4
  ghi  |  jkl |  7
  ghi  |  jkl |  7
  ghi  |  jkl |  7
  ghi  |  jkl |  7
  ghi  |  jkl |  7
  ghi  |  jkl |  7
  ghi  |  jkl |  7
Run Code Online (Sandbox Code Playgroud)

有没有办法巧妙地做到这一点?目前我正在做 N UNION ALL,其中 N 足够大以涵盖所有情况(例如,在本例中为 7)。

Gor*_*off 6

只需使用generate_series()

select t.*, generate_series(1, t.c)
from t ;
Run Code Online (Sandbox Code Playgroud)

如果您不需要结果集中的值,请使用横向联接:

select t.*
from t, lateral
     generate_series(1, t.c);
Run Code Online (Sandbox Code Playgroud)

或者:

select t.*
from t cross join lateral
     generate_series(1, t.c);
Run Code Online (Sandbox Code Playgroud)