想用 PIVOT 实现行转列时发现一行如果有多个字段要转成列时不知怎样去转,如下例子表A,请大侠帮忙,不要用case或拼接字段解答表A
大类 类别 代码 购买数 退还数 实售数
上身 外套 A 7 1 6
下身 单裙 B 8 3 5转换成大类 上身 下身
类别 外套 单裙
代码 A B
购买数 7 8
退还数 1 3
实售数 6 5 

解决方案 »

  1.   

    为什么一定要PIVOT 上个帖子回的那么多方法都去 试试嘛直接用邹老大的存储过程也可以啊
      

  2.   

    我把结果都贴出来了,是不是用pivot不能实现结果呢,不知那位能直接上答案
      

  3.   

    要這樣的顯示格式用PIVOT 不實用
    只能一行行賦值
      

  4.   

    http://topic.csdn.net/u/20111025/10/283a1823-13a2-4fff-9cef-e068282fac11.html?14363
      

  5.   

    動態這樣轉
    use Tempdb
    go
    --> --> 
     
    if not object_id(N'A') is null
    drop table A
    Go
    Create table A([大类] nvarchar(2),[类别] nvarchar(2),[代码] nvarchar(1),[购买数] int,[退还数] int,[实售数] int)
    Insert A
    select N'上身',N'外套',N'A',7,1,6 union all
    select N'下身',N'单裙',N'B',8,3,5
    Go
    declare @s nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000),@s4 nvarchar(4000)  
    select   
        @s=isnull(@s+',','declare ')+'@'+rtrim(Colid)+' nvarchar(4000)',  
        @s2=isnull(@s2+',','select ')+'@'+rtrim(Colid)+'=N'''+case when @s2 is not null then 'union all select' else ' select ' end+N'  [大类]=N'''+quotename(Name,'''')+'''''',  
        @s3=isnull(@s3,'')+'select @'+rtrim(Colid)+'=@'+rtrim(Colid)+N'+'',''+quotename([大类])+''=N''+quotename('+quotename(Name)+','''''''')  from A ',  
        @s4=isnull(@s4+'+','')+'@'+rtrim(Colid)  
    from   
        syscolumns   
    where  
        id=object_id('A') and Name not in(N'大类')  
    --print @s+' '+@s2+' '+@s3+' exec('+@s4+')' --显示执行语句  
    exec(@s+' '+@s2+' '+@s3+' exec('+@s4+')')  /*
    大类 上身 下身
    类别 外套 单裙
    代码 A B
    购买数 7 8
    退还数 1 3
    实售数 6 5
    */
      

  6.   

    本帖最后由 roy_88 于 2011-10-25 12:48:48 编辑