表结构如下:序号  名称  本月收入  本年收入
1     A      200        1600
2     B      300        2000
3     C      500        3000
4     D      800        5000想变成如下:
序号  名称  本月收入  本年收入
1     A      200        1600
2     B      300        2000
3     C      500        3000
4     D      800        5000
5    B比A多  100        400
6    D比C多  300        2000 
如何写?谢谢

解决方案 »

  1.   

    DECLARE @a TABLE(a int,b varchar(20),c int,d int)
    INSERT @a SELECT 1    ,'A',      200,        1600 
    UNION ALL SELECT 2    ,'B',      300,        2000 
    UNION ALL SELECT 3    ,'C',      500,        3000 
    UNION ALL SELECT 4    ,'D',      800,        5000 SELECT id=IDENTITY(int,1,1),b,c,d INTO #tmp FROM(
    SELECT * FROM @a
    UNION ALL
    SELECT a,b+'比'+(select b FROM @a where a=a.a-1)+'多',
    c-(SELECT c FROM @a WHERE a=a.a-1),
    d-(SELECT d FROM @a WHERE a=a.a-1)
     FROM @a a WHERE a%2=0
     )aa
    SELECT * FROM #tmp
    DROP TABLE #tmp
    --result
    /*id          b                              c           d           
    ----------- ------------------------------ ----------- ----------- 
              1 A                                      200        1600 
              2 B                                      300        2000 
              3 C                                      500        3000 
              4 D                                      800        5000 
              5 B比A多                                 100        400 
              6 D比C多                                 300        2000 (所影响的行数为 6 行)*/
      

  2.   

    create table #(id int identity,name varchar(10),M_income int,Y_income int)
    insert into # select 'a',200,1600
    insert into # select 'b',300,2000
    insert into # select 'c',500,3000
    insert into # select 'd',800,5000
    select name,m_income,y_income from #
    union all
    select name+'比'+fname+'多',M_income-Fm_income,y_income-Fy_income
    from 
    (
    select  max(case when(id)%2=0 then name end) as name,
    max(case when(id)%2=0 then M_income end) M_income,
    max(case when(id)%2=0 then Y_income end) y_income,
    max(case when(id)%2=1 then name end) Fname,
    max(case when(id)%2=1 then M_income end) fM_income,
    max(case when(id)%2=1 then Y_income end) fY_income from #
    group by (id+1)/2
    ) aaname                     m_income    y_income
    ------------------------ ----------- -----------
    a                        200         1600
    b                        300         2000
    c                        500         3000
    d                        800         5000
    b比a多                     100         400
    d比c多                     300         2000
      

  3.   

    DECLARE @a TABLE(a int,b varchar(20),c int,d int)
    INSERT @a SELECT 1    ,'A',      200,        1600 
    UNION ALL SELECT 2    ,'B',      300,        2000 
    UNION ALL SELECT 3    ,'C',      500,        3000 
    UNION ALL SELECT 4    ,'D',      800,        5000 
    select b [名称],c [本月收入],d [本年收入] from @a
    union  all  select 
    B.b + ' 比 '+ A.b +'多' [名称], B.c - a.c [本月收入],B.d - A.d [本年收入] from @a  A inner join ( select a, b ,c , d from  @a ) B
    on A.a = B.a -1
      

  4.   

    DECLARE @a TABLE(a int,b varchar(20),c int,d int)
    INSERT @a SELECT 1 ,'A', 200, 1600 
    UNION ALL SELECT 2 ,'B', 300, 2000 
    UNION ALL SELECT 3 ,'C', 500, 3000 
    UNION ALL SELECT 4 ,'D', 800, 5000