存储过程可以这样吗,用DataTable估计也好做点,把表查出来然后把元素按你的要求生成一个DataTable.

解决方案 »

  1.   

    请问是用的什么数据库?
    如果用SQL 2000中,要实现行列转换,需要综合利用聚合函数和动态SQL
    如果用SQL 2005,可以使用新引进的关键字PIVOT/UNPIVOT,轻松实现行列转换PIVOT创建测试表,插入测试数据create table test(id int,name varchar(20),quarter int,profile int)
    insert into test values(1,'a',1,1000)
    insert into test values(1,'a',2,2000)
    insert into test values(1,'a',3,4000)
    insert into test values(1,'a',4,5000)
    insert into test values(2,'b',1,3000)
    insert into test values(2,'b',2,3500)
    insert into test values(2,'b',3,4200)
    insert into test values(2,'b',4,5500)select * from testid name quarter profile
    ----------- -------------------- ----------- -----------
    1 a 1 1000
    1 a 2 2000
    1 a 3 4000
    1 a 4 5000
    2 b 1 3000
    2 b 2 3500
    2 b 3 4200
    2 b 4 5500(8 row(s) affected)利用PIVOT将个季度的利润转成横向显示:select id,name,
    [1] as "一季度",
    [2] as "二季度",
    [3] as "三季度",
    [4] as "四季度"
    from
    test
    pivot
    (
    sum(profile)
    for quarter in
    ([1],[2],[3],[4])
    )
    as pvt
    [/code]
    id name 一季度 二季度 三季度 四季度
    ----------- -------------------- ----------- ----------- ----------- -----------
    1 a 1000 2000 4000 5000
    2 b 3000 3500 4200 5500(2 row(s) affected)UNPIVOT建立测试表,插入测试数据drop table testcreate table test(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)insert into test values(1,'a',1000,2000,4000,5000)
    insert into test values(2,'b',3000,3500,4200,5500)
    select * from testid name Q1 Q2 Q3 Q4
    ----------- -------------------- ----------- ----------- ----------- -----------
    1 a 1000 2000 4000 5000
    2 b 3000 3500 4200 5500(2 row(s) affected)利用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:select id,name,quarter,profile
    from
    test
    unpivot
    (
    profile
    for quarter in
    ([Q1],[Q2],[Q3],[Q4])
    )
    as unpvtid name quarter profile
    ----------- -------------------- ---------- -----------
    1 a Q1 1000
    1 a Q2 2000
    1 a Q3 4000
    1 a Q4 5000
    2 b Q1 3000
    2 b Q2 3500
    2 b Q3 4200
    2 b Q4 5500(8 row(s) affected)
      

  2.   

    麻烦3楼的能不能把SQL 2000中怎么做的也发下,谢谢!
      

  3.   

    行列转换--普通假设有张学生成绩表(CJ)如下
    Name    Subject     Result
    张三    语文        80
    张三    数学        90
    张三    物理        85
    李四    语文        85
    李四    数学        92
    李四    物理        82想变成    
    姓名   语文   数学   物理
    张三   80     90     85
    李四   85     92     82declare @sql varchar(4000)
    set @sql = 'select Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)