部门表
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
------解决方案--------------------