1

How can I combine multiple results into one column?

For example, my query displays this result:

internaldocid | document id | versionid | title | tagname
1146 | DOC-1146 | 2 | Press Release | tag1
1146 | DOC-1146 | 2 | Press Release | tag2
1146 | DOC-1146 | 2 | Press Release | tag3

I would like it to display this result:

internaldocid | document id | versionid | title | tagname
1146 | DOC-1146 | 2 | Press Release | tag1, tag2, tag3

Here is my SQL:

SELECT
  cmsdocument.internaldocid,
  cmsdocument.documentid,
  cmsdocument.versionid,
  cmsdocversion.title,
  cmstag.tagname
FROM 
  public.cmsobjecttag,
  public.cmstag,
  public.cmsdocument,
  public.cmsdocversion,
  public.cmsuser
WHERE 
  cmsobjecttag.tagid = cmstag.tagid AND
  cmsobjecttag.objectid = cmsdocument.internaldocid AND
  cmsdocument.internaldocid = cmsdocversion.internaldocid AND
  cmsdocument.userid = cmsuser.userid AND
  cmsdocversion.state = 'published' AND
  cmsobjecttag.objecttype = '102';

Any help would be greatly appreciated.

1

1 Answer 1

2

Since PostgreSQL version 9, this is done simply by using string_agg:

SELECT
  cmsdocument.internaldocid,
  cmsdocument.documentid,
  cmsdocument.versionid,
  cmsdocversion.title,
  string_agg(cmstag.tagname, ',')
FROM 
  public.cmsobjecttag,
  public.cmstag,
  public.cmsdocument,
  public.cmsdocversion,
  public.cmsuser
WHERE 
  cmsobjecttag.tagid = cmstag.tagid AND
  cmsobjecttag.objectid = cmsdocument.internaldocid AND
  cmsdocument.internaldocid = cmsdocversion.internaldocid AND
  cmsdocument.userid = cmsuser.userid AND
  cmsdocversion.state = 'published' AND
  cmsobjecttag.objecttype = '102'
GROUP BY 
  cmsdocument.internaldocid,
  cmsdocument.documentid,
  cmsdocument.versionid,
  cmsdocversion.title
Sign up to request clarification or add additional context in comments.

1 Comment

@Curtis don't forget to upvote the helping answers and to accept the answer that best suits your needs.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.