当前位置: 代码迷 >> Sql Server >> 求一条SQL语句,多记录拼成一条
  详细解决方案

求一条SQL语句,多记录拼成一条

热度:78   发布时间:2016-04-24 18:16:28.0
【求助】求一条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 试了几次 终于
CREATE TABLE BUMEN2(DEPTID INT,DEPTNAME VARCHAR(10))
INSERT INTO BUMEN2
SELECT '1','中南海' union all
select '2','国务院'

create table xfj2(id int,deptid int , deptname varchar(10), accountid int,accountname varchar(10),money1 int)
insert into xfj2
SELECT '1' ,     '1',          '中南海' ,    '1',               '中石化',         400 union all
SELECT '2',       '1',          '中南海'     ,'2',              '中海油'          ,300 union all
SELECT '3'       ,'2',          '国务院',     '1',              '中石化',          500
go

select a.deptname,sum(c.Money1) as money ,stuff((select ','+accountname from xfj2 b where a.deptname=b.deptname for xml path('')),1,1,'') as kk
from bumen2  a left join xfj2 c on a.DEPTNAME =c.deptname  group by a.deptname

------解决方案--------------------
引用:
Quote: 引用:

IF EXISTS(SELECT NAME FROM sys.objects AS o WHERE NAME = 'test')
DROP TABLE test
  相关解决方案