表a
spbm                 sl
机械                 15
电子                 20
化工                 15
机械                 20
电子                 20我想得到的结果是     sl            remak
机械                 35            机械/电子/化工
电子                 40            机械/电子/化工 
化工                 15            机械/电子/化工首先对spbm进行group by分类汇总,然后group by 得到的spbm结果进行合并,形成一个re字段,中间用/分开,和表a进行union

解决方案 »

  1.   


    /*---------------------------------
    --  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 行受影响)
    */
      

  2.   

    http://blog.csdn.net/lihan6415151528/archive/2009/08/10/4431237.aspx
      

  3.   

    --> 生成测试数据表: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]-->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 行受影响)
    */
      

  4.   

    ----------------------------------------------------------------
    -- 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 行受影响)*/