数据如下
商品类别 商品名 数量 出货日
水果  苹果  20  10/1
水果  桔子  10  10/1
水果  桔子  30  10/2
粮食  大米  12  10/1
粮食  麦子  25  10/4不能用自定义函数,想得到的结果如下:  商品类别 商品名 10/1 10/2 10/4
水果     苹果   20 
水果     桔子   10    30
粮食     大米   12  
粮食     麦子               25如何实现阿
 

解决方案 »

  1.   

    select * from tb order by '出货日'
      

  2.   

    create table #temp
    (
       splb  varchar(10),
       spm   varchar(10),
       sl    int,
       chr   varchar(5) 
    )
    goinsert into #temp select
    '水果','苹果',  20,  '10/1' union all select 
    '水果','桔子',  10,  '10/1' union all select
    '水果','桔子',  30,  '10/2' union all select
    '粮食','大米',  12,  '10/1' union all select
    '粮食','麦子',  25,  '10/4' 
    godeclare @sql varchar(4000)
    set @sql='select splb,spm'
    select @sql=@sql+' ,sum(case when chr='''+chr+''' then sl else 0 end) '''+chr+''''
    from #temp
    group by chrselect @sql=@sql+' from #temp group by splb,spm,chr order by 1 desc,3 desc'exec (@sql)drop table #temp/*(5 row(s) affected)splb       spm        10/1        10/2        10/4        
    ---------- ---------- ----------- ----------- ----------- 
    水果         苹果         20          0           0
    水果         桔子         10          0           0
    水果         桔子         0           30          0
    粮食         大米         12          0           0
    粮食         麦子         0           0           25
    */
      

  3.   

    --用动态SQL语句实现动态交叉表
    create table T (商品类别 varchar(100),商品名 varchar(100), 数量 int, 出货日  varchar(100))
    insert into T select '水果',  '苹果',  20,  '10/1' 
    insert into T select '水果',  '桔子',  10,  '10/1' 
    insert into T select '水果',  '桔子',  30,  '10/2' 
    insert into T select '粮食',  '大米',  12,  '10/1' 
    insert into T select '粮食',  '麦子',  25,  '10/4'declare @sql varchar(4000) 
    set @sql = 'select 商品类别,商品名  ' select @sql = @sql + ' , sum(case 出货日 when '''+出货日+ ''' then 数量 end) as [ '+出货日+ '] ' 
    from (select distinct 出货日 from T) as a set @sql = @sql + ' from T group by 商品类别,商品名 order by 商品类别,商品名' print @sqlexec(@sql) 
    drop table T/*--结果
    商品类别    商品名     10/1       10/2        10/4
    -------------------------------------------------------
    粮食        大米        12        NULL        NULL
    粮食        麦子        NULL      NULL        25
    水果        桔子        10        30          NULL
    水果        苹果        20        NULL        NULL
    */
      

  4.   

    同意楼上的!可怜的CSDN。
    我打开这个页面后,等着出现让我回复的页面部分,我等不及了,就去吃饭了,吃饭回来,还真出来了
      

  5.   

    借用wangtiecheng数据:
    create table T (商品类别 varchar(100),商品名 varchar(100), 数量 int, 出货日  varchar(100)) 
    insert into T select  '水果 ',   '苹果 ',  20,   '10/1 '  
    insert into T select  '水果 ',   '桔子 ',  10,   '10/1 '  
    insert into T select  '水果 ',   '桔子 ',  30,   '10/2 '  
    insert into T select  '粮食 ',   '大米 ',  12,   '10/1 '  
    insert into T select  '粮食 ',   '麦子 ',  25,   '10/4 ' godeclare @s nvarchar(4000)
    set @s=''
    select @s=@s+','+quotename(出货日)+'= sum(case when 出货日='+quotename(出货日,'''')+' then 数量 else 0 end)'
    from T group by 出货日exec('select 商品类别,商品名'+@s+' from T group by 商品类别,商品名 order by 商品类别')
    go
    粮食  大米  12 0 0
    水果  桔子  10 30 0
    粮食  麦子  0 0 25
    水果  苹果  20 0 0
      

  6.   

    --如果没有发生,显示为0,则用:create table T (商品类别 varchar(100),商品名 varchar(100), 数量 int, 出货日  varchar(100)) 
    insert into T select '水果',  '苹果',  20,  '10/1'  
    insert into T select '水果',  '桔子',  10,  '10/1'  
    insert into T select '水果',  '桔子',  30,  '10/2'  
    insert into T select '粮食',  '大米',  12,  '10/1'  
    insert into T select '粮食',  '麦子',  25,  '10/4' 
    declare @sql varchar(4000)  
    set @sql = 'select 商品类别,商品名  '  select @sql = @sql + ' , sum(case 出货日 when '''+出货日+ ''' then 数量 else 0 end) as [ '+出货日+ '] '  
    from (select distinct 出货日 from T) as a  set @sql = @sql + ' from T group by 商品类别,商品名 order by 商品类别,商品名'  print @sql exec(@sql)  
    drop table T /* --结果 
    商品类别    商品名     10/1       10/2        10/4 
    ------------------------------------------------------- 
    粮食        大米        12        0           0     
    粮食        麦子        0         0           25 
    水果        桔子        10        30          0     
    水果        苹果        20        0           0     
    */
      

  7.   

     ' , sum(case 出货日 when  ' ' '+出货日+  ' ' ' then 数量 else 0 end) as [  '+出货日+  ']  ' 
    真TM难~~看了老半天没看明白