Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-06-2024 01:33 PM
Here's a way that preserves ordering. It seems way to complicated to me, I'm hoping there is a more elegant way someone else can provide in a subsequent comment.
%sql
;WITH Blah(col1, i) as
(
SELECT 'abc',1
UNION SELECT 'def',2
UNION SELECT 'ghi',3
)
SELECT
array_join(collect_set(col1), ',') as combined_string
FROM Blah;
--ghi,def,abc
---------------------
--but what if you want to preserve ordering?
;WITH Blah(col1, i) as
(
SELECT 'abc',1
UNION SELECT 'def',2
UNION SELECT 'ghi',3
)
SELECT
ARRAY_JOIN
(
TRANSFORM
(
ARRAY_SORT
(
ARRAY_AGG( (col1, i) ),
(left, right) -> CASE WHEN left.i < right.i THEN -1 WHEN left.i > right.i THEN 1 ELSE 0 END
),
x -> x.col1
),
','
) as combined_string
FROM Blah;
--abc,def,ghi