已知表A,要得到報表B,如何做?
表B的字段是根據表A的缺點動態增加的.
我用存儲過程游標做,但未能實現,並且速度可能會很慢
請教!!!!!!表A員工 日期 缺點名稱 缺點數量
A 12/01 缺點1 5
A 12/01 缺點2 6
B 12/01 缺點1 7
C 12/01 缺點3 8
A 12/02 缺點1 9
... ... 缺點4 ...
... ... 缺點5 ...
... ... 缺點..... ...表B員工 日期 缺點1 缺點2 缺點3 缺點4 缺點5 缺點.....
A 12/01 5 6
A 12/02 9
B 12/01 7
C 1201 8 

解决方案 »

  1.   

    你可以看一下SQL帮助里的交叉报表,上边有很详细的实现方法!
      

  2.   

    看这个例子,看能否帮上你!
       
    把列里值一行显示出来declare @temp varchar(8000)
    set @temp=''
    select @temp=@temp+[name]+', ' from tb_Char
    select @temp
      

  3.   

    select 员工,日期,sum(case '缺点名称' when '缺点1' then 1 else 0 end) as 缺点1;
                     sum(case '缺点名称' when '缺点2' then 1 else 0 end) as 缺点2;
                     sum(case '缺点名称' when '缺点2' then 1 else 0 end) as 缺点2;
                     …………………………………………
            from 表A groupby 员工
    //汉字字段加好引号
    这种方法不好,用动态sql好些,但我不会用,以前大版 风炎 给我写过,如果想搞清,不如想他请教下,你可以参考我以前的贴子:
    http://community.csdn.net/Expert/TopicView.asp?id=3552806
      

  4.   

    提醒下,这个贴比较好,好好看下,还有我贴子里那个连接,都应该看下,讲有动态sql的使用。
      

  5.   

    select 员工,日期,(case  缺点名称 when '缺点1'  then (缺点数量) else 0 end)  as 缺点1,
                     (case  缺点名称 when '缺点2'  then (缺点数量) else 0 end)  as 缺点2,
                     (case  缺点名称 when '缺点3'  then (缺点数量) else 0 end)  as 缺点3
    from 表A
    group by 员工,日期,缺点名称,缺点数量
    order by 员工
    楼主给分,害得我是0点还在给你研究,专门还建了个表。以上ok
      

  6.   

    感謝各位以下代碼已經可以解決,但我還是不明白為甚麼
    還要請高手指點!!!!!!!!!!!!!!!!!!declare @sql varchar(8000)
    set @sql='select 作業員 '
    --select @sql=@sql+',sum(case when 缺點名稱='''+缺點名稱+''' then 缺點數量 else 0 end) as '+缺點名稱
    select @sql=@sql+',sum(case when 缺點名稱='''+缺點名稱+''' then 缺點數量 else 0 end)['+缺點名稱+']'
    from A group by 缺點名稱
    set @sql=@sql+' from a group by 作業員'--,缺點名稱,缺點數量'
    exec(@sql)