CREATE TABLE #aa(year NVARCHAR(4),dept NVARCHAR(3),
                 code NVARCHAR(4),ccus NVARCHAR(4),
                 fs FLOAT,cend INT)INSERT INTO #aa values('2001','112','1131','AS11',50.36,60)
INSERT INTO #aa values('2002','112','1131','AS11',40,100)
INSERT INTO #aa values('2003','112','1131','AS11',50,150)
INSERT INTO #aa values('2001','054','1131','BB20',10,70)
INSERT INTO #aa values('2002','054','1131','BB20',40,110)
INSERT INTO #aa values('2003','054','1131','BB20',20,130)
INSERT INTO #aa values('2002','044','1131','SFGS',15,45)
INSERT INTO #aa values('2003','044','1131','SFGS',30,75)
INSERT INTO #aa values('2001','058','1131','ASDD',50,50)
INSERT INTO #aa values('2002','058','1131','ASDD',-50,0)
select ccus,cend, fs as firstyear,
   (select fs from #aa 
    where [year]='2002' and ccus =A.ccus) AS secondyear,
   (select fs from #aa 
    where [year]='2001' and ccus =A.ccus) AS thirdyear
FROM #aa A WHERE [year] = (select max([year]) FROM #aa 
                          WHERE ccus = A.ccus GROUP BY ccus)drop Table #aa

解决方案 »

  1.   

    CREATE TABLE #aa(year NVARCHAR(4),dept NVARCHAR(3),
                     code NVARCHAR(4),ccus NVARCHAR(4),
                     fs DECIMAL(12,2),cend INT)INSERT INTO #aa values('2001','112','1131','AS11',50.36,60)
    INSERT INTO #aa values('2002','112','1131','AS11',40,100)
    INSERT INTO #aa values('2003','112','1131','AS11',50,150)
    INSERT INTO #aa values('2001','054','1131','BB20',10,70)
    INSERT INTO #aa values('2002','054','1131','BB20',40,110)
    INSERT INTO #aa values('2003','054','1131','BB20',20,130)
    INSERT INTO #aa values('2002','044','1131','SFGS',15,45)
    INSERT INTO #aa values('2003','044','1131','SFGS',30,75)
    INSERT INTO #aa values('2001','058','1131','ASDD',50,50)
    INSERT INTO #aa values('2002','058','1131','ASDD',-50,0)select ccus,cend,    ISNULL((select fs from #aa 
        where [year]='2003' and ccus =A.ccus),0) as firstyear,
       ISNULL((select fs from #aa 
        where [year]='2002' and ccus =A.ccus),0) AS secondyear,
       ISNULL((select fs from #aa 
        where [year]='2001' and ccus =A.ccus),0) AS thirdyear
    FROM #aa A WHERE [year] = (select max([year]) FROM #aa 
                              WHERE ccus = A.ccus GROUP BY ccus)drop Table #aa
      

  2.   

    第二个代码执行结果如下
    ccus      cend       firstyear     secondyear    thirdyear     
    AS11 150 50.00 40.00 50.36
    BB20 130 20.00 40.00 10.00
    SFGS 75 30.00 15.00 .00
    ASDD 0 .00 -50.00 50.00
      

  3.   

    CREATE TABLE #aa(year NVARCHAR(4),dept NVARCHAR(3),
                     code NVARCHAR(4),ccus NVARCHAR(4),
                     fs DECIMAL(12,2),cend INT)INSERT INTO #aa values('2001','112','1131','AS11',50.36,60)
    INSERT INTO #aa values('2002','112','1131','AS11',40,100)
    INSERT INTO #aa values('2003','112','1131','AS11',50,150)
    INSERT INTO #aa values('2001','054','1131','BB20',10,70)
    INSERT INTO #aa values('2002','054','1131','BB20',40,110)
    INSERT INTO #aa values('2003','054','1131','BB20',20,130)
    INSERT INTO #aa values('2002','044','1131','SFGS',15,45)
    INSERT INTO #aa values('2003','044','1131','SFGS',30,75)
    INSERT INTO #aa values('2001','058','1131','ASDD',50,50)
    INSERT INTO #aa values('2002','058','1131','ASDD',-50,0)declare @i int,@sql varchar(5000)
    set @i=0
    set @sql='select ccus,max(cend) as cend'
    select @i=@i+1,@sql=@sql+' ,isnull(sum(case year when '''+cast(year as varchar)+''' then fs end),0) as [第'+cast(@i as varchar)+'年]'
    from (select distinct year from #aa) a
    select @sql=@sql+ ' from #aa group by ccus order by ccus asc'
    exec (@sql)
    drop table #aa
    结果:
    -----------------------
    AS11 150 50.36 40.00 50.00
    ASDD 50 50.00 -50.00 .00
    BB20 130 10.00 40.00 20.00
    SFGS 75 .00 15.00 30.00
      

  4.   

    CREATE TABLE #aa(year NVARCHAR(4),dept NVARCHAR(3),
                     code NVARCHAR(4),ccus NVARCHAR(4),
                     fs DECIMAL(12,2),cend INT)INSERT INTO #aa values('2001','112','1131','AS11',50.36,60)
    INSERT INTO #aa values('2002','112','1131','AS11',40,100)
    INSERT INTO #aa values('2003','112','1131','AS11',50,150)
    INSERT INTO #aa values('2001','054','1131','BB20',10,70)
    INSERT INTO #aa values('2002','054','1131','BB20',40,110)
    INSERT INTO #aa values('2003','054','1131','BB20',20,130)
    INSERT INTO #aa values('2002','044','1131','SFGS',15,45)
    INSERT INTO #aa values('2003','044','1131','SFGS',30,75)
    INSERT INTO #aa values('2001','058','1131','ASDD',50,50)
    INSERT INTO #aa values('2002','058','1131','ASDD',-50,0)
    declare @i int,@sql varchar(5000)
    set @i=0
    set @sql='select ccus,isnull(sum(case when year=2003 then cend end),0) as cend'
    select @i=@i+1,@sql=@sql+' ,isnull(sum(case year when '''+cast(year as varchar)+''' then fs end),0) as [第'+cast(@i as varchar)+'年]'
    from (select distinct year from #aa) a
    select @sql=@sql+ ' from #aa group by ccus order by ccus asc'
    exec (@sql)
    drop table #aa-------------------------
    AS11 150 50.36 40.00 50.00
    ASDD 0 50.00 -50.00 .00
    BB20 130 10.00 40.00 20.00
    SFGS 75 .00 15.00 30.00