code_junkie

concatenate several fields into one with SQL

Nov 10th, 2011
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. ID NAME
  2. 1 page 1
  3. 2 page 2
  4. 3 page 3
  5. 4 page 4
  6.  
  7. ID NAME
  8. 1 tag 1
  9. 2 tag 2
  10. 3 tag 3
  11. 4 tag 4
  12.  
  13. ID PAGEID TAGID
  14. 1 2 1
  15. 2 2 3
  16. 3 3 4
  17. 4 1 1
  18. 5 1 2
  19. 6 1 3
  20.  
  21. ID NAME TAGS
  22. 1 page 1 tag 1, tag 2, tag 3
  23. 2 page 2 tag 1, tag 3
  24. 3 page 3 tag 4
  25. 4 page 4
  26.  
  27. SELECT pagetag.id, page.name, group_concat(tag.name) FROM
  28. (page LEFT JOIN pagetag on page.id = pagetag.pageid)
  29. LEFT JOIN tag on pagetag.tagid = tag.id
  30. group by page.id;
  31.  
  32. SELECT page_tag.id, page.name, group_concat(tags.name) FROM tag,page, page_tag
  33. where page_tag.page_id = page.page_id AND page_tag.tag_id = tag.id;
  34.  
  35. SELECT page.id AS id, page.name AS name, tagstable.tags AS tags FROM page
  36. LEFT OUTER JOIN
  37. (SELECT pagetag.pageid, GROUP_CONCAT(distinct tag.name) as tags FROM tag INNER JOIN pagetag ON tagid=tag.id GROUP BY pagetag.pageid) AS tagstable ON tagstable.pageid=page.id GROUP BY page.id
  38.  
  39. id name tags
  40. ---------------------------
  41. 1 page 1 tag2,tag3,tag1
  42. 2 page 2 tag1,tag3
  43. 3 page 3 tag4
  44. 4 page 4 NULL
  45.  
  46. select ID as 'PageId', Name as 'PageName', null as 'Tags'
  47. into #temp
  48. from [PageTable]
  49.  
  50. declare @lastOp int
  51. set @lastOp = 1
  52.  
  53. while @lastOp > 0
  54. begin
  55. update p
  56. set p.tags = isnull(tags + ', ', '' ) + t.[Tagid]
  57. from #temp p
  58. inner join [TagTable] t
  59. on p.[PageId] = t.[PageId]
  60. where p.tags not like '%' + t.[Tagid] + '%'
  61.  
  62. set @lastOp == @@rowcount
  63. end
  64.  
  65. select * from #temp
  66.  
  67. select COALESCE(pagetag.id, '') AS id ...
Add Comment
Please, Sign In to add comment