我需要在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)。
答案 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