我试图在新列中添加string_agg的日期
SELECT g.ganado_id,
string_agg(i.date, ', ') AS date
FROM inseminacion i
INNER JOIN ganado g
ON g.ganado_id = i.ganado_id
GROUP BY g.ganado_id
实际输出
|ganado_id|date |
|1 |2016-10-15 |
|2 |2016-10-15, 2017-02-15 |
|3 |2016-10-15, 2017-03-09, 2017-05-27 |
|4 |2017-06-02 |
期望的输出
|ganado_id|date1 |date2 |date3 |
|1 |2016-10-15 | | |
|2 |2016-10-15 |2017-02-15 | |
|3 |2016-10-15 |2017-03-09 |2017-05-27 |
|4 |2017-06-02 | | |
我的第一印象是使用数据透视表,但我无法弄清楚如何
答案 0 :(得分:0)
您的查询不需要两个表格。 。 。换句话说,*p
不是必需的:
<< 8
答案 1 :(得分:0)
我意识到你已经有了答案,但是为了其他可能有类似问题的人的利益,我提供了使用PostgreSQL优秀阵列的替代方案,这是其中一个特点。我很难回到使用任何其他DBMS。
SELECT g.ganado_id,
array_agg(i.date) AS dates
FROM inseminacion i
INNER JOIN ganado g
ON g.ganado_id = i.ganado_id
GROUP BY g.ganado_id
就其本身而言,这实际上可能完全满足您的需求。它具有非常可扩展的额外优势,因此如果您的阵列超出了三个元素,您就不需要改变它。
此外,如果您需要将其转换为您列出的格式,那将是一项相对简单的任务:
with cte as (
SELECT g.ganado_id,
array_agg(i.date) AS dates
FROM inseminacion i
INNER JOIN ganado g
ON g.ganado_id = i.ganado_id
GROUP BY g.ganado_id
)
select
ganado_id, dates[1], dates[2], dates[3]
from cte
当然,如果你有第四个和第五个约会的那一天到来,那将会很简单:
select
ganado_id, dates[1], dates[2], dates[3], dates[4], dates[5]
from cte