Sql 根据列值重复行数

Sql 根据列值重复行数,sql,postgresql,generate-series,set-returning-functions,Sql,Postgresql,Generate Series,Set Returning Functions,我有一张这样的桌子: | name | start_date | duration_day| ======================================== | A | 2015-01-01 | 3 | | B | 2015-01-02 | 2 | 现在我想得到这样的输出: | name | date | ===================== | A | 20

我有一张这样的桌子:

| name |  start_date   |  duration_day|
========================================
|   A  |  2015-01-01   |       3      |
|   B  |  2015-01-02   |       2      |
现在我想得到这样的输出:

   | name |     date   |
   =====================
   |  A   | 2015-01-01 |
   |  A   | 2015-01-02 |
   |  A   | 2015-01-03 |
   |  B   | 2015-01-02 |
   |  B   | 2015-01-03 |
如何在PostgreSQL中执行此操作?

借用,您可以使用行源列表中的
duration\u day
值生成一个系列。该函数通过隐式表达式使用
my\u表中的
duration\u day

select
  name, 
  start_date + generate_series(0, duration_day - 1)
from
  your_table;
借用,您可以使用源列表中的行从
duration\u day
值生成一个系列。该函数通过隐式表达式使用
my\u表中的
duration\u day



@Bulat的可能复制品不太可能。不是PG,而且PG中也有比该答案更好的解决方案。@Patrick,谢谢Patrick更新我的问题使用动态理货表的通用解决方案示例可以在这里找到,但对于PG,使用generate_series是tidyCan
duration_day
be
NULL
0
,这将如何影响结果?请始终提供您的Postgres版本<第9.3页引入了代码>侧向连接:可能与@Bulat重复,但实际上并非如此。不是PG,而且PG中也有比该答案更好的解决方案。@Patrick,谢谢Patrick更新我的问题使用动态理货表的通用解决方案示例可以在这里找到,但对于PG,使用generate_series是tidyCan
duration_day
be
NULL
0
,这将如何影响结果?请始终提供您的Postgres版本<代码>横向
连接是在第9.3页引入的:来吧<代码>在选择列表中生成_series()
是不好的做法。你可以做得更好!来吧<代码>在选择列表中生成_series()是不好的做法。你可以做得更好!停止讨论
generate_series()
用法:)@Abelisto Yeah。有困难的时候为什么容易呢?{;-)我同意你的看法。我不喜欢
generate_series()表函数是生成一组行的函数,这些行由基本数据类型(标量类型)或复合数据类型(表行)组成。它们与查询的FROM子句中的表、视图或子查询一样使用。“在某些情况下,在选择列表中使用表函数会导致不可预测的结果,特别是在使用多个表函数时。停止讨论
generate_series()
用法:)@Abelisto是的。遇到困难时为什么容易?{;-)我同意你的看法。我不喜欢
generate_series()
from
子句之外的任何地方。您能告诉我为什么select中的generate_series不好吗?@JaehyunShin
generate_series()
是一个所谓的表函数(单击我回答中的链接):“表函数是生成一组行的函数,由基本数据类型(标量类型)或复合数据类型组成(表行)。它们与查询的FROM子句中的表、视图或子查询一样使用。“在某些情况下,在select列表中使用表函数会导致不可预测的结果,尤其是在使用多个表函数时。
SELECT name, start_date + n AS date
FROM my_table, generate_series(0, duration_day - 1) AS x(n);