日期:2014-05-17  浏览次数:20511 次

关于多数据表查询,子查询,然后对结果进行分组
我的T_Award数据表的内容是这个样子


我使用了这样的SQL函数使数据这样分组的显示出来了
SQL code

select typename, awardname = stuff((select ',' + awardname from T_Award t where typename = T_Award.typename for xml path('')) , 1 , 1 , '')
from T_Award
group by typename



结果是这个样子


然后我在使用一个多表查询的时候使用的SQL语句是这个样子
SQL code

select a.personName,d.awardName ,c.activityName,d.typeName
            from T_Person a
            join T_PersonAwardR b
            on a.id=b.personId
            join T_Activity c
            on b.activityId=c.id
            join T_Award d
            on d.id=b.awardId
            where c.activityName='万人长跑大赛' and d.typeName='优秀主持人奖';



这样我的查询结果是这个样子



然后我想仿照着第一个例子的语句使我的数据这样显示

写了一下午了,就是仿照不出来,只能请大家帮帮忙了。谢谢~~~~


------解决方案--------------------
SQL code

;with cte as
(
    select a.personName,d.awardName ,c.activityName,d.typeName
                from T_Person a
                join T_PersonAwardR b
                on a.id=b.personId
                join T_Activity c
                on b.activityId=c.id
                join T_Award d
                on d.id=b.awardId
                where c.activityName='万人长跑大赛' and d.typeName='优秀主持人奖';
)

select distinct awardName, 获奖人员名单=stuff((select ','+personName from cte where t.awardName=awardName for xml path('')),1,1,'') from cte t