日期:2014-05-16  浏览次数:20441 次

【求助】求一条SQL语句,多记录拼成一条
部门表
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
.................................................................................................

需要以下结果

deptname        money           accountname
中南海        700                中石化,中海油
国务院        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
---------- ----------- -----------------------------
中南海        700         中石化,中海油
国务院        500         中石化
 */

------解决方案--------------------
刚学sql 试了几次 终于