首页 新闻 会员 周边 捐助

关于多数据表查询,子查询,然后对结果进行分组

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-01 14:07

我的T_Award数据表的内容是这个样子

 

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

 

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

结果是这个样子

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

 

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

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

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

仿照一下午了,就是写不对,请大家帮帮忙吧!谢谢!!!!!

zhiqiang21的主页 zhiqiang21 | 初学一级 | 园豆:4
提问于:2012-08-31 20:52
< >
分享
最佳答案
0
with awardT 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 B.awardName,LEFT(awards,LEN(awards)-1) as awards FROM (
SELECT awardName,
(SELECT personName+',' FROM awardT
  WHERE awardName=A.awardName
  for xml path('')) as awards
from awardT A 
group by awardName
) B 
收获园豆:10
向往-SONG | 老鸟四级 |园豆:4853 | 2012-08-31 21:33

谢谢啦!

zhiqiang21 | 园豆:4 (初学一级) | 2012-09-01 14:07
其他回答(2)
0
SELECT  a.awardnaame ,
        STUFF(( SELECT  ',' + table1.personname
                FROM    table1
                WHERE   table1.awardnaame = a.awardnaame
              FOR
                XML PATH('')
              ), 1, 1, '') AS personname
FROM    ( SELECT    awardnaame
          FROM      table1
          GROUP BY  awardnaame
        ) a
收获园豆:5
田林九村 | 园豆:2367 (老鸟四级) | 2012-08-31 21:31
0

SELECT  a.awardnaame ,
       
STUFF(( SELECT  ',' + table1.personname
               
FROM    table1
               
WHERE   table1.awardnaame = a.awardnaame
             
FOR
                XML PATH(
'')
              ),
1, 1, '') AS personname
FROM    ( SELECT    awardnaame
         
FROM      table1
         
GROUP BY  awardnaame
        ) a

收获园豆:5
jason2013 | 园豆:1998 (小虾三级) | 2012-09-01 00:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册