Table tblTest
  (CityDis 不固定)
   TypeName  CityDis     Unit       Result 
    A          北京     1000元        1245
    A          上海     10000元       548
    B          北京     1000元        2134
    B          上海     10000元       5412
    ..         ...      .....         .... 想得到以下结果  TypeName       北京                上海
     A           1245(1000元)      548(10000元)
     B           2134(1000元)       5412(10000元)
拜托各位了.

解决方案 »

  1.   

    --参考/*-- 数据测试环境 --*/
    if exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [tb]
    GOcreate table tb(单位名称 varchar(10),日期 datetime,销售额 int)
    insert into tb
     select 'A单位','2001-01-01',100
     union all select 'B单位','2001-01-02',101
     union all select 'C单位','2001-01-03',102
     union all select 'D单位','2001-01-04',103
     union all select 'E单位','2001-01-05',104
     union all select 'F单位','2001-01-06',105
     union all select 'G单位','2001-01-07',106
     union all select 'H单位','2001-01-08',107
     union all select 'I单位','2001-01-09',108
     union all select 'J单位','2001-01-11',109/*-- 要求结果
    日期       A单位  B单位 C单位 D单位 E单位  F单位 G单位 H单位 I单位 J单位   
    ---------- ----- ----- ----- ----- ----- ----- ----  ----  ---- ------
    2001-01-01 100   0     0     0     0     0     0     0     0     0
    2001-01-02 0     101   0     0     0     0     0     0     0     0
    2001-01-03 0     0     102   0     0     0     0     0     0     0
    2001-01-04 0     0     0     103   0     0     0     0     0     0
    2001-01-05 0     0     0     0     104   0     0     0     0     0
    2001-01-06 0     0     0     0     0     105   0     0     0     0
    2001-01-07 0     0     0     0     0     0     106   0     0     0
    2001-01-08 0     0     0     0     0     0     0     107   0     0
    2001-01-09 0     0     0     0     0     0     0     0     108   0
    2001-01-11 0     0     0     0     0     0     0     0     0     109
    --*//*-- 常规处理方法*/ 
    declare @sql varchar(8000)
    set @sql='select 日期=convert(varchar(10),日期,120)'
    select @sql=@sql+',['+单位名称
     +']=sum(case 单位名称 when '''+单位名称+''' then 销售额 else 0 end)'
    from(select distinct 单位名称 from tb) a
    exec(@sql+' from tb group by convert(varchar(10),日期,120)')
      

  2.   

    已经写成这样了,就是不知道怎么把Unit和Result加起来.
    最好是能先将Result格式化为 2,134.00 再加上Unit. 即: 2,134.00(1000元)
    set @sql = 'select TypeName'
    select @sql = @sql + ',SUM(case CityDis when ''' + AA.CityDis +''' then result else 0 end) as ''' + CityDis+''''
    from (select distinct CityDis from tblTest) as AA


    set @sql = @sql + ' from tblTest group by TypeName'

    print @sql

    exec(@sql)
      

  3.   

    谢谢coolingpipe(冷箫轻笛).
      好像不行啊,我想要把Result和Unit 连在一起显示.
      

  4.   

    连接这样写就可以了吧select  ...,cast(Result as varchar) + '(' + Unit + ')',...
    from tablename就是说可以先把这两列合并成一列格式这块比较麻烦
      

  5.   

    set @sql = 'select TypeName'
    --好像只能加在SUM里面,否则又没法对应了,这个数据是属于北京...城市这些字段的.
    --但是加在这里它又必须在Group By 里,这样以来又有重复数据(因为每个城市的Unit不一致)
    select @sql = @sql + ',SUM(case CityDis when ''' + AA.CityDis +''' then result else 0 end) as ''' + CityDis+''''
    from (select distinct CityDis from tblTest) as AA
    set @sql = @sql + ' from tblTest group by TypeName'coolingpipe(冷箫轻笛)
     能否再帮帮忙啊,格式化先不管了.
      

  6.   

    if object_id('pubs..tb') is not null
       drop table tb
    gocreate table tb
    (
    TypeName varchar(10),
    CityDis  varchar(10),
    Unit     varchar(10),
    Result   int
    )insert into tb(TypeName,CityDis,Unit,Result) values('A','北京','1000元' ,'1245')
    insert into tb(TypeName,CityDis,Unit,Result) values('A','上海','10000元','548')
    insert into tb(TypeName,CityDis,Unit,Result) values('B','北京','1000元' ,'2134')
    insert into tb(TypeName,CityDis,Unit,Result) values('B','上海','10000元','5412')declare @sql varchar(8000)
    set @sql = 'select TypeName'
    select @sql = @sql + ' , max(case citydis when ''' + citydis + ''' then cast(Result as varchar) + ''(''+ unit + '')'' end) [' + citydis + ']'
    from (select distinct citydis from tb) as a
    set @sql = @sql + ' from tb group by typename'
    exec(@sql) drop table tb/*result
    TypeName   北京          上海       
    ---------- ------------- -------------
    A          1245(1000元)  548(10000元)
    B          2134(1000元)  5412(10000元)
    */
      

  7.   

    忠心感谢coolingpipe(冷箫轻笛)与dawugui(潇洒老乌龟)  问题搞定鸟,多谢.