[英]POSTGRES generate n rows based on a value n
我需要在postgres中生成一个视图,该视图包含基于列中值n
n
行。
让我们举个例子。 我有这样一张桌子:
A* | B | C
--------------------
abc | def | 4
ghi | jkl | 7
我需要生成一个这样的视图:
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 UNION ALL
,N足以覆盖所有情况(例如在这种情况下为7)。
只需使用generate_series()
:
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);
使用递归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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.