表的纵向转横向问题:
有一个统计结果表,表的结构和数据如下:
民族,性别,学历,记录数
汉    男    本科    18
汉    男    大专    29
汉    男    高中    12
汉    女    本科    6
满    男    本科    5
满    女    高中    4
满    女    本科    8
......现在想通过设置,把某些列转为横向的,如把民族作为横向列:           汉   满
男,本科   18   0
男,大专   29   0   
男,高中   12   0
女  高中   0    4 
女  本科   6    8以上只是其中设置的一种,可以根据需要把(民族,性别)作为横向列,而产生另外一种结构,
这样要如何通过程序来实现?

解决方案 »

  1.   

    fastreport可以实现这样的交叉报表
      

  2.   

    用交叉表来实现
    在SQL2000幫助 上有個詳細的例子
      

  3.   

    参考SQL:
    CREATE TABLE [Test] (       [id] [int] IDENTITY (1, 1) NOT NULL ,       [name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,       [subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,       [Source] [numeric](18, 0) NULL ) ON [PRIMARY]GOINSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'语文',60)INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'数学',70)
    交叉表语句的实现:--用于:交叉表的列数是确定的select name,sum(case subject when '数学' then source else 0 end) as '数学',          sum(case subject when '英语' then source else 0 end) as '英语',            sum(case subject when '语文' then source else 0 end) as '语文' from test group by name
      

  4.   

    可是,要如何实现动态的设置呢?
    我的数据库是oracle的,没有case语法,要用什么语法呢?
      

  5.   

    这个“sum(case subject when '数学' then source else 0 end)”在oracle中要如何表达?
      

  6.   

    交叉表解决了,也应该意思意思大家了吧.HAHAHA!
      

  7.   

    对于这样一个统计结果表,使用动态SQL语句来实现按纵/横两个方向的数据统计结果
      

  8.   

    行列转化,我以前遇到过,给你参考一下
    http://community.csdn.net/Expert/topic/3563/3563589.xml?temp=.6610681