数据库表项目有: 姓名   科目    金额。
如有如下数据:   小王   包装    10
                 小王   焊接    20
                 小王   上色    20
                 小乐   包装    15
                 小乐   焊接    25
                 小乐   上色    25需要显示的格式:  姓名    包装    焊接    上色
                  小王    10      20      20
                  小乐    15      25      25怎么样才能实现这样的效果。因为科目是不定的,现在我使用SQL SERVER 2000数据库急待各位高手相助。

解决方案 »

  1.   

    用虚拟数据集ClientDataset来转化解决
      

  2.   

    http://search.csdn.net/Expert/topic/1015/1015421.xml?temp=3.82632E-03
    DELPHI中对SQL SERVER转置矩阵的处理
      

  3.   

    declare @sql varchar(8000)set @sql='select 姓名 'select @sql=@sql+',sum(case when 科目='''+科目+''' then 金额 else 0 end) as '++科目
    from yourtable
    group by 科目
    set @sql=@sql+' from yourtable group by 姓名 '
    exec(@sql)
      

  4.   

    declare @sql varchar(8000)set @sql='select 姓名 'select @sql=@sql+',sum(case when 科目='''+科目+''' then 金额 else 0 end) as '+科目
    from yourtable
    group by 科目
    set @sql=@sql+' from yourtable group by 姓名 '
    exec(@sql)
      

  5.   

    /*SQL Server2000*/ 
    --测试表 
    create table gdywfzj( 
    姓名 char(10), 
    科目 char(10), 
    金额 int) 
    --插入数据 
    insert into gdywfzj 
    select '小王','包装',10 
    union 
    select '小王','焊接',20
    union 
    select '小王','上色',20 
    union 
    select '小乐','包装',15 
    union 
    select '小乐','焊接',25 
    union 
    select '小乐','上色',25 --查询
    DECLARE @SQL VARCHAR(8000) 
    SET @SQL='SELECT 姓名 ' 
    SELECT @SQL= @SQL+ ',MAX(CASE WHEN 科目 = ''' + 科目 + ''' THEN 金额 else 0 END) [' +科目 + ']' FROM (SELECT DISTINCT 科目 FROM gdywfzj) A 
    SET @SQL=@SQL+' FROM gdywfzj GROUP BY  姓名 ' 
    EXEC (@SQL) 
    --删除测试环境 
    drop table gdywfzj /*结果
    小乐       15 25 25
    小王       10 20 20
    */