表一
 ID        Name
------------------------
1         联想电脑
2         方正电脑
3         HP电脑表二
ID       表一ID         NUMBER
--------------------------------------
1          1               10
2          1               10
1          1               10
1          2               10
2          2               10SQL结果如下
表二ID      联想电脑      方正电脑     HP电脑
-----------------------------------------
1          20            10         0
2          10            10         0这个SQL语句怎样写呢?在Access中可以用TROSFORM来实现,在SQL 2000中怎样来实现呢?

解决方案 »

  1.   

    sql server里面不知道怎么实现,不过oracle里面有一个转置函数,不知道sql server里面有没有,那个函数肯定可以实现
      

  2.   

    但在Access中可以用一条语句来实现呀
      

  3.   

    我想如果不用什麼Function(用了不具通用性),而是用幾個Sql弄出來!
      

  4.   

    declare @sql varchar(8000)
    set @sql = 'select ID'
    select @sql = @sql + ',sum(case 表一ID when '''+cast([ID] as varchar(10))+''' then NUMBER else 0 end) ['+[Name]+']'  from 表一
    select @sql = @sql+' from 表二 group by ID'exec(@sql)
    go
      

  5.   

    --测试:create table #表一(ID int,Name varchar(100))
    insert #表一 values(1,         '联想电脑')
    insert #表一 values(2,         '方正电脑')
    insert #表一 values(3,         'HP电脑')create table #表二(ID int,表一ID int,NUMBER int)
    insert #表二 values(1,          1               ,10)
    insert #表二 values(2 ,         1               ,10)
    insert #表二 values(1  ,        1               ,10)
    insert #表二 values(1   ,       2               ,10)
    insert #表二 values(2    ,      2               ,10)
    declare @sql varchar(8000)
    set @sql = 'select ID'
    select @sql = @sql + ',sum(case 表一ID when '''+cast([ID] as varchar(10))+''' then NUMBER else 0 end) ['+[Name]+']'  from #表一
    select @sql = @sql+' from #表二 group by ID'exec(@sql)
    go
      

  6.   

    呵呵行,不过能不能从WITH CUBE来考虑实现呢?
      

  7.   

    create proc 过程名
    as
    declare @sql varchar(8000)
    set @sql = 'select ID'
    select @sql = @sql + ',sum(case 表一ID when '''+cast([ID] as varchar(10))+''' then NUMBER else 0 end) ['+[Name]+']'  from 表一
    select @sql = @sql+' from 表二 group by ID'
    exec(@sql)
    go---调用:exec 过程名
      

  8.   

    应为你需要动态得到 “ 联想电脑      方正电脑     HP电脑”,所以必须用动态sql
      

  9.   

    to pengdali(大力 V2.0)
    在Access中可以用一句语句就能实现这个,为什么在SQL中去不能实现?
      

  10.   

    不过,在这先谢你,你到http://expert.csdn.net/Expert/topic/1908/1908425.xml?temp=.5528833先领分吧!