少しの努力でのみ。このようなもの:
select listagg((case when running_len < 4000 then oi.impression end), ',') within group (order by oi.line)
from (select oi.*,
sum(length(oi.impression) + 1) over (partition by ?? order by oi.line) as running_len
from order_impression oi
) oi
group by ??;
これにより、実行長が計算され、長を超えない値のみが集計されます。 ??
集計に使用しているものは何でもです。これは、line
は一意であるため、order by
安定しています。
これにはimpression
は含まれません それは長さを超えています-そしてその後は何もありません。印象を損なうことはありません。そのロジックは可能ですが、クエリが複雑になります。