表a
spbm sl
机械 15
电子 20
化工 15
机械 20
电子 20我想得到的结果是 sl remak
机械 35 机械/电子/化工
电子 40 机械/电子/化工
化工 15 机械/电子/化工首先对spbm进行group by分类汇总,然后group by 得到的spbm结果进行合并,形成一个re字段,中间用/分开,和表a进行union
spbm sl
机械 15
电子 20
化工 15
机械 20
电子 20我想得到的结果是 sl remak
机械 35 机械/电子/化工
电子 40 机械/电子/化工
化工 15 机械/电子/化工首先对spbm进行group by分类汇总,然后group by 得到的spbm结果进行合并,形成一个re字段,中间用/分开,和表a进行union
/*---------------------------------
-- Author : htl258(Tony)
-- Date : 2009-09-11 08:28:33
-- Version: Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
Mar 29 2009 10:27:29
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Evaluation Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)---------------------------------*/
--> 生成测试数据表:aIF NOT OBJECT_ID('[a]') IS NULL
DROP TABLE [a]
GO
CREATE TABLE [a]([spbm] nvarchar(2),[sl] int)
INSERT [a]
SELECT N'机械',15 UNION ALL
SELECT N'电子',20 UNION ALL
SELECT N'化工',15 UNION ALL
SELECT N'机械',20 UNION ALL
SELECT N'电子',20
GO
--SELECT * FROM [a]-->SQL查询如下:
;WITH t AS
(
SELECT [spbm],SUM(sl) sl FROM a GROUP BY spbm
)
SELECT *,
remak =STUFF((SELECT '/'+spbm FROM t FOR XML PATH('')),1,1,'')
FROM t
/*
spbm sl remak
---- ----------- ---------------------------
电子 40 电子/化工/机械
化工 15 电子/化工/机械
机械 35 电子/化工/机械(3 行受影响)
*/
DROP TABLE [a]
GO
CREATE TABLE [a]([spbm] nvarchar(2),[sl] int)
INSERT [a]
SELECT N'机械',15 UNION ALL
SELECT N'电子',20 UNION ALL
SELECT N'化工',15 UNION ALL
SELECT N'机械',20 UNION ALL
SELECT N'电子',20
GO
--SELECT * FROM [a]-->SQL2000查询如下:
IF NOT OBJECT_ID('[fn_test]') IS NULL
DROP FUNCTION [fn_test]
GO
CREATE FUNCTION fn_test()
RETURNS NVARCHAR(500)
AS
BEGIN
DECLARE @s VARCHAR(500)
SELECT @s=ISNULL(@s+'/','')+spbm FROM a GROUP BY spbm
RETURN @s
END
GOSELECT [spbm],SUM(sl) sl,remak=dbo.fn_test() FROM a GROUP BY spbm
/*
spbm sl remak
---- ----------- ---------------------------
电子 40 电子/化工/机械
化工 15 电子/化工/机械
机械 35 电子/化工/机械(3 行受影响)
*/
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-09-11 09:05:38
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([spbm] varchar(4),[sl] int)
insert [a]
select '机械',15 union all
select '电子',20 union all
select '化工',15 union all
select '机械',20 union all
select '电子',20
--------------开始查询--------------------------
;with f as
(
select [spbm],sum(sl) as sl from a group by spbm
)
select
*,
remak=stuff((select '/'+[spbm] from f for xml path('')), 1, 1, '')
from
f
----------------结果----------------------------
/* spbm sl remak
---- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
电子 40 电子/化工/机械
化工 15 电子/化工/机械
机械 35 电子/化工/机械(3 行受影响)*/