当前位置: 代码迷 >> Sql Server >> sql 多记录合并成一条
  详细解决方案

sql 多记录合并成一条

热度:29   发布时间:2016-04-24 18:16:29.0
【求助】sql 多记录合并成一条
本帖最后由 xupeihuagudulei 于 2014-04-04 09:44:17 编辑

部门表
deptid deptname
1   中南海
2   国务院
..................

商户表
accountid  accountname 
1    中石化
2    中海油
..................
消费记录表
id    deptid  deptname   accountid accountname       money 
1       1          中南海     1               中石化         400
2       1          中南海     2              中海油          300
3       2          国务院     1              中石化          500
4       1         中南海      1             中石化          400
.................................................................................................

需要以下结果

deptname        money           accountname
中南海        1100                中石化,中海油
国务院        500                中石化
........................................................................................

IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE NAME = 'test')
DROP TABLE test
CREATE TABLE test
( id INT ,
  deptid INT , 
  deptname NVARCHAR(10) , 
  accountid INT ,
  accountname NVARCHAR(10) , 
  [money] INT
)

GO
INSERT INTO test
SELECT 1 , 1 , N'中南海' , 1 , N'中石化' , 400 UNION ALL
SELECT 2 , 1 , N'中南海' , 2 , N'中海油' , 300 UNION ALL
SELECT 3 , 2 , N'国务院' , 2 , N'中石化' , 500

GO 
--执行查询------------------
SELECT 
deptname , SUM([MONEY]) AS [money] , STUFF((SELECT ',' + accountname  FROM test AS e WHERE e.deptname = t.deptname FOR XML PATH('')) ,1,1,'') AS accountname
FROM test AS t GROUP BY t.deptname

/*
 deptname   money       accountname
---------- ----------- -----------------------------
中南海        1100         中石化,中海油,中石化
国务院        500         中石化
 */


以上语句执行的结果accountname有数据重复了,见红色部分(妈的,没见红。)。
我想的结果就是:
/*
 deptname   money       accountname
---------- ----------- -----------------------------
中南海        1100         中石化,中海油
国务院        500         中石化
 */

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

楼主速度真快
还没写完呢。
楼主能不能把答案也贴出来?
------解决方案--------------------
那直接接分了。
  相关解决方案