背景:
基于该值的观察系数,值会产生新的值。
e.g。值 A 会在用户点击某个按钮创建时创建新的值 A-1,A-2,A-3 ,但在此之前,我需要提供他们预览。
问题:
如果我最初有这张表:
id | value | observation
-----------------------------------------------
1 | A | 3
-----------------------------------------------
2 | B | 2
我希望根据观察值(确认前的预览)显示要添加的计算新值集,如下所示:
id | value | new value to be created | observation
-----------------------------------------------
1 | A | A-1 | 3
-----------------------------------------------
1 | A | A-2 | 3
-----------------------------------------------
1 | A | A-3 | 3
这就像将表连接到另一个包含计算值的表而没有实际的表/关系。
我的想法是:
创建一个临时表,其中计算值为,然后进行连接(但是如果行数太大,每次插入批次会很昂贵)
我已尝试将计算值作为数组聚合,但我需要它们在不同的行中,如我所显示的第二个表。
我该怎么做?或者这甚至可能吗?
答案 0 :(得分:1)
看一下generate_series函数,试试这个:
select
t.id,
t.value,
CASE
WHEN t.observation = 0 OR t.observation IS NULL THEN
NULL
ELSE
t.value || '-' || series.n
END
as "new value to be created",
t.observation
from
(select
s.n
from
generate_series(1,(select max(observation) from tableName)) as s(n)
) as series
cross join
tableName as t
where
((t.observation = 0 OR t.observation IS NULL) AND series.n = 1)
OR
(series.n <= t.observation)
order by
t.value,
series.n
答案 1 :(得分:0)
这里SQL对你有用。
select id, value,value ||'-'|| number as "new value to be created" ,observation
from (
select 1 as number
union
select 2
union
select 3
union
select 4) as t, context where t.number <= observation
这里动态生成数字SQL
select id, value,value ||'-'|| generate_series as "new value to be created" ,
observation
from (
select * from generate_series(1, 20)) as t, context where t.generate_series <= observation
谢谢。