在2000中使用Case 语句来实现,在2005中用unpivot来实现.

解决方案 »

  1.   

    在SQL server 2000下的测试代码:
    create table #t (日期 int,水费 int ,电费 int,气费 int)
    insert #t 
    select 20060303,100,110,120
    UNION ALL 
    select 20060304,101,102,103
    SELECT A.项目,'20060303'=Sum(A.[20060303]),'20060304'=sum(A.[20060304])
    FROM (
    select 项目='水费'
     ,'20060303'=CASE WHEN 日期=20060303 THEN 水费 ELSE 0 END
     ,'20060304'=CASE WHEN 日期=20060304 THEN 水费 ELSE 0 END
    FROM #t
    UNION ALL
    select 项目='电费'
     ,'20060303'=CASE WHEN 日期=20060303 THEN 电费 ELSE 0 END
     ,'20060304'=CASE WHEN 日期=20060304 THEN 电费 ELSE 0 END
    FROM #t
    UNION ALL
    select 项目='气费'
     ,'20060303'=CASE WHEN 日期=20060303 THEN 气费 ELSE 0 END
     ,'20060304'=CASE WHEN 日期=20060304 THEN 气费 ELSE 0 END
    FROM #t
    ) A
    GROUP By A.项目
    结果:
    -- 项目  20060303  20060304
    -- 电费  110       102
    -- 气费  120       103
    -- 水费  100       101
      

  2.   

    但是日期的具体数值和个数是不确定的,又如何写上面的sql
      

  3.   

    取出原始表的记录数!将xzq111()的语句用循环来写 !