我昨天发的一个求助中,详细情况为:
http://topic.csdn.net/u/20100427/00/d635abeb-fb4a-43fd-9f8e-3351b5bfd0d5.html但是因为我的原表比这个要大得多,也就是name列多了很多数据,所以当我看到朋友们写的代码,我有一个疑问:在这位朋友提供的SQL 代码中,写了以下几句SELECT 764,'n','KIA','1.24','7.82',10.00 UNION ALL
SELECT 764,'n','FLJ','1.24','7.82',10.00 UNION ALL
SELECT 764,'n','WNT','1.24','7.82',10.00 UNION ALL
SELECT 764,'n','ARX','1.24','7.82',10.00 UNION ALL
SELECT 764,'n','PIT','1.24','7.82',10.00 UNION ALL
SELECT 764,'n','CAV','1.24','7.82',10.00 UNION ALL
SELECT 764,'n','NEU','1.24','7.82',10.00 UNION ALL
SELECT 815,'c','COL','0.02','0.08',2.362 UNION ALL
SELECT 815,'c','PCD','0.02','0.08',2.362 UNION ALL
SELECT 815,'c','PC9','0.02','0.08',2.362 UNION ALL
SELECT 815,'c','BTB','0.02','0.08',2.362 UNION ALL
SELECT 815,'c','CD3','0.02','0.08',2.362 UNION ALL
SELECT 815,'c','SPA','0.02','0.08',2.362 UNION ALL
SELECT 815,'c','FAT','0.02','0.08',2.362
要是我的name列很长,比我这个提供的表的name列的数据长多了,未必也要在写SQL 这截代码中一样,都加进去么?以上的这个代码段,可是我的一个表的数据啊,要是把更大的表进行操作,那是很繁琐的工作,请问有没有动态的解决办法???谢过!!

解决方案 »

  1.   

    IF NOT OBJECT_ID('[tb]') IS NULL
        DROP TABLE [tb]
    GO
    CREATE TABLE [tb]([id] INT,[name] NVARCHAR(10),[symbol] NVARCHAR(10),[value] NVARCHAR(10),[Found] NVARCHAR(10),[rich] DECIMAL(18,3))
    INSERT [tb]
    SELECT 764,'n','KIA','1.24','7.82',10.00 UNION ALL
    SELECT 764,'n','FLJ','1.24','7.82',10.00 UNION ALL
    SELECT 764,'n','WNT','1.24','7.82',10.00 UNION ALL
    SELECT 764,'n','ARX','1.24','7.82',10.00 UNION ALL
    SELECT 764,'n','PIT','1.24','7.82',10.00 UNION ALL
    SELECT 764,'n','CAV','1.24','7.82',10.00 UNION ALL
    SELECT 764,'n','NEU','1.24','7.82',10.00 UNION ALL
    SELECT 815,'c','COL','0.02','0.08',2.362 UNION ALL
    SELECT 815,'c','PCD','0.02','0.08',2.362 UNION ALL
    SELECT 815,'c','PC9','0.02','0.08',2.362 UNION ALL
    SELECT 815,'c','BTB','0.02','0.08',2.362 UNION ALL
    SELECT 815,'c','CD3','0.02','0.08',2.362 UNION ALL
    SELECT 815,'c','SPA','0.02','0.08',2.362 UNION ALL
    SELECT 815,'c','FAT','0.02','0.08',2.362
    GO
    --SELECT * FROM [tb]-->SQL查询如下:
    if object_id('fn_test') is not null
        drop function fn_test
    go
    create function fn_test(@name nvarchar(3000))
    returns nvarchar(3000)
    begin
        declare @s nvarchar(3000)
        select @s=isnull(@s+',','')+symbol from tb where name=@name
        return @s
    end
    goselect distinct id,name,dbo.fn_test(name) symbol,value,Found,rich from tb这个够长吧
      

  2.   

    你只需要这段:-->SQL查询如下:
    if object_id('fn_test') is not null
        drop function fn_test
    go
    create function fn_test(@name nvarchar(10))
    returns nvarchar(30)
    begin
        declare @s nvarchar(30)
        select @s=isnull(@s+',','')+symbol from tb where name=@name
        return @s
    end
    goselect distinct id,name,dbo.fn_test(name) symbol,value,Found,rich from tb-->SQL2005查询如下:
    select distinct id,name,
        stuff((select ','+[symbol] from tb where name=t.name for xml path('')),1,1,'') symbol,
        value,Found,rich 
    from tb t