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