繁体   English   中英

POSTGRES基于值n生成n行

[英]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

SQLFIDDLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM