怎样把如下数据源
从数据库得到的Table数据:
张三  语文  90
张三  数学  80
张三  英语  70
李四  语文  70
李四  数学  90
李四  英语  80
王五  语文  50
王五  数学  40
王五  英语  30
转换成下列样式
       语文  数学  英语
张三    90    80    70
李四    70    90    80
王五    50    40    30

解决方案 »

  1.   

    建表:在查询分析器里运行:CREATE TABLE [Test] (
           [id] [int] IDENTITY (1, 1) NOT NULL ,
           [name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
           [subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
           [Source] [numeric](18, 0) NULL 
    ) ON [PRIMARY]
    GOINSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'语文',60)
    INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'数学',70)
    INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'英语',80)
    INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'数学',75)
    INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'语文',57)
    INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'语文',80)
    INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'英语',100)
    Go
    交叉表语句的实现:
    --用于:交叉表的列数是确定的
    select name,sum(case subject when '数学' then source else 0 end) as '数学',
              sum(case subject when '英语' then source else 0 end) as '英语',
                sum(case subject when '语文' then source else 0 end) as '语文' 
    from test 
    group by name 
    --用于:交叉表的列数是不确定的
    declare @sql varchar(8000)set @sql = 'select name,'
    select @sql = @sql + 'sum(case subject when '''+subject+''' 
                              then source else 0 end) as '''+subject+''','
      from (select distinct subject from test) as a 
    select @sql = left(@sql,len(@sql)-1) + ' from test group by name'
    exec(@sql)
    go
      

  2.   

    联机丛书-->索引-->交叉数据报表
      

  3.   

    YiZhiNet(YiZhi.Net) ( )
    ==================================
      没看明白呢!!!!。
      

  4.   

    select [name],
    SUM(CASE  [month] WHEN 1 THEN [money] ELSE 0 END) AS 一月,
    SUM(CASE  [month] WHEN 2 THEN [money] ELSE 0 END) AS 二月,
    SUM(CASE  [month] WHEN 3 THEN [money] ELSE 0 END) AS 三月
    from table1 
    group by [name]