如何在单个字段中对n行进行分组(如MYSQL中的GROUP_CONCAT)

时间:2013-12-07 11:58:05

标签: sql .net sql-server-ce

我在C#应用程序中使用SQL Server Compact版来存储数据。对于我的Datagrid,我需要在一行中显示属于它的TITLE和TAGS(用,分隔)。

在MySQL中有一个GROUP_CONCAT()函数可以产生我想要的结果。不幸的是SQL Server CE没有这样的功能,所以我希望这里的某个人有解决这个问题的解决方法/解决方案。

Article                     ArticleTags                Tags 
+-------------+----------+  +------------+----------+  +----------+---------+
+ ARTICLE_ID  + TITLE    +  + ARTICLE_ID + TAG_ID   +  + TAG_ID   + Name    +
+-------------+----------+  +------------+----------+  +----------+---------+
+ 1           + A        +  + 1          + 20       +  + 20       + Sport   +
+ 2           + B        +  + 1          + 21       +  + 21       + Web     +
+ 3           + C        +  + 1          + 22       +  + 22       + Nature  +
+-------------+----------+  + 3          + 23       +  + 23       + Girls   +
                            +------------+----------+  +----------+---------+ 

我需要以下结果:

+------------+----------------------+
+ TITLE      + TAGS                 +
+------------+----------------------+
+ A          + Sport, Web, Nature   +
+ B          +                      +
+ C          + Girls                +
+------------+----------------------+ 

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT a.title, tags.tagNames
FROM (
    SELECT t.article_ID article_ID, 
      STUFF(
             (SELECT ', ' + p.name 
              FROM articletags t2
                inner join tags p on (t2.tag_id=p.tag_id)
              WHERE t.article_ID = t2.article_ID
              FOR XML PATH (''))
              , 1, 2, '')  AS tagNames
    FROM articletags t
    GROUP BY article_id) tags
    right JOIN article a on (tags.article_id = a.article_id)