diff --git a/api/src/org/labkey/api/data/dialect/BasePostgreSqlDialect.java b/api/src/org/labkey/api/data/dialect/BasePostgreSqlDialect.java index d61d5ceffa5..3df6920cacb 100644 --- a/api/src/org/labkey/api/data/dialect/BasePostgreSqlDialect.java +++ b/api/src/org/labkey/api/data/dialect/BasePostgreSqlDialect.java @@ -494,27 +494,46 @@ public SQLFragment getGroupConcat(SQLFragment sql, boolean distinct, boolean sor result.append("array_to_string("); result.append("core.sort("); // TODO: Switch to use ORDER BY option inside array aggregate instead of our custom function result.append("array_agg("); + if (distinct) + { + result.append("DISTINCT "); + } + + if (includeNulls) + { + result.append("COALESCE(CAST("); + result.append(sql); + result.append(" AS VARCHAR), '')"); + } + else + { + result.append(sql); + } + + result.append(")"); // array_agg + result.append(")"); // core.sort } else { result.append("string_agg("); - } + if (distinct) + { + result.append("DISTINCT "); + } - if (distinct) - { - result.append("DISTINCT "); + if (includeNulls) + { + result.append("COALESCE("); + result.append(sql); + result.append("::text, '')"); + } + else + { + result.append(sql); + result.append("::text"); + } } - result.append(sql); - if (includeNulls) - { - result.append("::text"); - } - if (useSortFunction) - { - result.append(")"); // array_agg - result.append(")"); // core.sort - } result.append(", "); result.append(delimiterSQL); result.append(")"); // array_to_string | string_agg