假如说我有这样一张表(A)和数据
表A:
ID     字段1  字段2  字段3  字段4
1      A       B      C1      D
2      A       B      C2      D
3      A       B      C3      D
4      A       B      C4      D
5      A       F      C5      D
6      A       F      C6      D
查询出来的结果是这样,请问该如何实现,又不影响速度
字段1  字段2 
A        B    C1   C2   C3   C4   D
A        F    C5   C6   Dsql

解决方案 »

  1.   

    這樣嗎?
    USE test
    GO-->生成表tbif object_id('tb') is not null 
    drop table tb
    Go
    Create table tb([ID] smallint,[字段1] nvarchar(1),[字段2] nvarchar(1),[字段3] nvarchar(2),[字段4] nvarchar(1))
    Insert into tb
    Select 1,N'A',N'B',N'C1',N'D'
    Union all Select 2,N'A',N'B',N'C2',N'D'
    Union all Select 3,N'A',N'B',N'C3',N'D'
    Union all Select 4,N'A',N'B',N'C4',N'D'
    Union all Select 5,N'A',N'F',N'C5',N'D'
    Union all Select 6,N'A',N'F',N'C6',N'D'DECLARE @sql NVARCHAR(MAX)SELECT 
    @sql=ISNULL(@sql+',','')+'Max(Case when col=''col'+LTRIM(row)+''' Then [字段3] Else '''' End) As [col'+LTRIM(row)+']'  
    FROM (
    SELECT ROW_NUMBER()OVER(PARTITION BY [字段1],[字段2] ORDER BY [字段3]) AS row FROM tb
    )AS t 
    GROUP BY row

    EXEC ('
    ;WITH t AS(
    SELECT 
    *
    ,''col''+Ltrim(Row_number()over(partition by [字段1],[字段2] ORDER BY [字段3])) As col
    FROM tb
    )
    Select 
    [字段1]
    ,[字段2]
    ,'+@sql+'
    ,[字段4] 
    From t
    Group by [字段1],[字段2],[字段4]
    ')/*
    字段1  字段2  col1 col2 col3 col4 字段4
    ---- ---- ---- ---- ---- ---- ----
    A    B    C1   C2   C3   C4   D
    A    F    C5   C6             D*/