某个select结果如下
NAME PATTERN COUNT
A    BLACK   1
A    WHITE   3
B    RED     4
C    GREEN   2
C    BLUE    5
我想得到如下结果
NAME  DESC
A     BLACK(1),WHITE(3)
B     RED(4)
C     GREEN(2),BLUE(5)
请高手指点

解决方案 »

  1.   

    --DROP TABLE A
    EXEC CS'$A
    NAME PATTERN COUNT
    A BLACK 1
    A WHITE 3
    B RED 4
    C GREEN 2
    C BLUE 5
    '--> 测试数据: [A]
    if object_id('[A]') is not null drop table [A]
    create table [A] (NAME varchar(1),PATTERN varchar(5),COUNT int)
    insert into [A]
    select 'A','BLACK',1 union all
    select 'A','WHITE',3 union all
    select 'B','RED',4 union all
    select 'C','GREEN',2 union all
    select 'C','BLUE',5ALTER   FUNCTION GET_STRING(@NAME VARCHAR(10))
    RETURNS NVARCHAR(40)
    AS
     BEGIN
         DECLARE @RESULT  NVARCHAR(40)
    SELECT @RESULT=ISNULL(@RESULT+',','')+PATTERN+'('+LTRIM(COUNT)+')' FROM A WHERE NAME=@NAME
         RETURN @RESULT
    END
    select NAME,DBO.GET_STRING(NAME) from [A] GROUP BY NAME
    NAME                                          
    ---- ---------------------------------------- 
    A    BLACK(1),WHITE(3)
    B    RED(4)
    C    GREEN(2),BLUE(5)(所影响的行数为 3 行)
      

  2.   


    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([NAME] [nvarchar](10),[PATTERN] [nvarchar](10),[COUNT] [int])
    INSERT INTO [tb]
    SELECT 'A','BLACK','1' UNION ALL
    SELECT 'A','WHITE','3' UNION ALL
    SELECT 'B','RED','4' UNION ALL
    SELECT 'C','GREEN','2' UNION ALL
    SELECT 'C','BLUE','5'--SELECT * FROM [tb]-->SQL查询如下:
    SELECT DISTINCT name, [DESC] = STUFF(
               (
                   SELECT ','+pattern+QUOTENAME([COUNT], '(') 
                   FROM tb
                   WHERE name = t.name FOR XML PATH('')
               ), 1, 1, ''
           ) 
    FROM tb t
    /*
    name       DESC
    ---------- ----------------------------
    A          BLACK(1),WHITE(3)
    B          RED(4)
    C          GREEN(2),BLUE(5)(3 行受影响)
    */