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

问个group by 的问题。解决不了啊。
本帖最后由 zly22169846 于 2013-09-11 08:55:20 编辑

CREATE TABLE [dbo].[Table_1](
[ID] [nchar](10) NULL,
[a] [int] NULL,
[DocNo] [nchar](10) NULL,
[num] [int] NULL
) ON [PRIMARY]


insert into table_1
select  1,177,101,5
union all select 2,178,102,5
union all select 3,177,103,5
union all select 4,179,104,5
union all select 5,179,105,5


语句如上。
然后查询以下语句 

select SUM(num) as SUM_num,a FROM table_1
group by a

得到的结果是

SUM_num      a
10       177
5       178
10       179


我同在要实现如下界面的数据结果?就是字段a中177 这个累加的sum_num=10是由列Docno=101和103累加得到的,而a=178只有一个就是他自己的102,同样a=179也同样由104和105累加,那我要添加一个列名ccc把101,103 添加到这个字段中。好做备注。请教如何实现?谢谢。

SUM_num      a            列名ccc
10      177         101,103
5      178         102       
10      179         104,105 
sql

------解决方案--------------------
select SUM(num) as SUM_num,a ,
ccc=STUFF((SELECT ',' + RTRIM(DocNo) FROM dbo.table_1 b WHERE b.a=a.a FOR XML PATH('')),1,1,'')
FROM table_1 a
group by a
/*
SUM_num a ccc
10 177 101,103
5 178 102
10 179 104,105
*/

------解决方案--------------------

select sum(x.num) 'SUM_num',
       x.a,
       stuff((select ','+rtrim(y.DocNo)