补充一下:如果myTable表中的Name就固定 台式电脑,笔记本,打印机 这三个,可以一个SQL查询来完成
如果不固定的,则需要动态SQL了

解决方案 »

  1.   

    begin tran
    create table mytable (ID int ,  ComID int,    CName varchar(50) ,State varchar(50) )insert mytable 
    select 1 ,  30  ,  '台式电脑' ,'良好' insert mytable 
    select 2,  30  ,  '笔记本'  ,'良好' insert mytable 
    select 3,    12 ,    '打印机'  ,'损坏' insert mytable 
    select 4,    30 ,    '台式电脑','报废' insert mytable 
    select 5,    26,      '打印机','良好' insert mytable 
    select 6,    22,      '笔记本','报废' 
    declare @sql varchar(8000) 
    set @sql='Select ComID ,CName ' 
    select @sql=@sql+',sum(case State when '''+av+''' then 1 else 0 end)['+av+']' 
    from (select distinct State as av from mytable) as  a 
    set @sql=@sql+' from mytable group by CName,ComID' 
    set @sql='select * into mytableData from ('+@sql+') as tt'
    print (@sql)
    exec(@sql) 
    select * from mytableData12 打印机 0 0 1
    22 笔记本 1 0 0
    26 打印机 0 1 0
    30 笔记本 0 1 0
    30 台式电脑 1 1 0
    下面再怎么做啊,高手继续咯!