POSTGRES基于值n生成n行

时间:2018-04-11 15:13:55

标签: sql postgresql

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

我们举个例子。我有一张这样的桌子:

n

我需要生成一个这样的视图:

   A*  |  B   |  C
 --------------------
  abc  |  def |  4
  ghi  |  jkl |  7

有没有办法聪明地做到这一点?目前我正在做N 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 ,N大到足以涵盖所有情况(例如在这种情况下为7)。

2 个答案:

答案 0 :(得分:2)

只需使用select t.*, generate_series(1, t.c) from t ;

select t.*
from t, lateral
     generate_series(1, t.c);

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

select t.*
from t cross join lateral
     generate_series(1, t.c);

或者:

{{1}}

答案 1 :(得分:1)

使用递归CTE

你可以试试这个。

WITH RECURSIVE result(A,B,L,C) AS(
    SELECT A,B,1 L,MAX(C) C
   FROM T
    GROUP BY A,B
    UNION ALL
    SELECT A,B,L+1,C
    FROM result
    WHERE L+1 <= C
)
SELECT A,B,C
FROM result
ORDER BY C,A

SQLFIDDLE