Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:选择一行x次数_Sql_Postgresql_Select - Fatal编程技术网

PostgreSQL:选择一行x次数

PostgreSQL:选择一行x次数,sql,postgresql,select,Sql,Postgresql,Select,表中的单行有一个整数值大于等于1的列,无论该列显示多少次,都必须选择该列。因此,如果列有“2”,我希望select查询返回单行2次 如何实现这一点?您可以通过递归查询来实现,请查看中的示例 差不多 WITH RECURSIVE t(cnt, id, field2, field3) AS ( SELECT 1, id, field2, field3 FROM foo UNION ALL SELECT t.cnt+1, t.id, t.f

表中的单行有一个整数值大于等于1的列,无论该列显示多少次,都必须选择该列。因此,如果列有“2”,我希望select查询返回单行2次


如何实现这一点?

您可以通过递归查询来实现,请查看中的示例

差不多

WITH RECURSIVE t(cnt, id, field2, field3) AS (
        SELECT 1, id, field2, field3
        FROM foo
      UNION ALL
        SELECT t.cnt+1, t.id, t.field2, t.field3
        FROM t, foo f
        WHERE t.id = f.id and t.cnt < f.repeat_cnt
)
SELECT id, field2, field3 FROM t;

你可以制作一张充满数字的表格,如下所示:

CREATE TABLE numbers
(
  num INT NOT NULL
, CONSTRAINT numbers_pk PRIMARY KEY (num)
);
SELECT generate_series(1,{xTimes}), a.field1, a.field2 FROM my_table a;
并使用您需要的任意多个数字填充它,从一个开始:

INSERT INTO numbers VALUES(1);
INSERT INTO numbers VALUES(2);
INSERT INTO numbers VALUES(3);
...
然后,如果您有基于列repeat_count的表mydata要重复,您可以这样查询它:

SELECT mydata.*
FROM mydata
JOIN numbers
ON numbers.num <= mydata.repeat_count
WHERE ...
如果你需要提前知道最大重复次数,并让你的数字表达到那个高度


不知道你为什么要这样想。想和大家分享吗?

我不知道你为什么想做这样的事,但是

CREATE TABLE testy (a int,b text);
INSERT INTO testy VALUES (3,'test');
SELECT testy.*,generate_series(1,a) from testy;  --returns 3 rows

最简单的方法是进行简单的选择,如下所示:

CREATE TABLE numbers
(
  num INT NOT NULL
, CONSTRAINT numbers_pk PRIMARY KEY (num)
);
SELECT generate_series(1,{xTimes}), a.field1, a.field2 FROM my_table a;

表中是否会有更多的行需要适当地复制,还是总是只有一行?另外,您能告诉我们为什么要使用这种方法吗?可能会有一个更干净的解决方案。这是一个非常奇怪的要求,您正在处理需要这种格式的遗留应用程序吗?但是,如果您可以控制传入的select语句,那么您就不能在应用程序代码中使用一个循环吗?只在8.4版本中使用,这仍然是测试版。如果投票人是谁,请分享原因?不想争论,只是好奇我自己的启发。作为一个例子,我需要这一点来生成随机样本,其中整数列定义了每个类别的样本数。