场景介绍:输出学生工号,学生姓名,以及行转列实现的语文、数学、英语对应的分数(没有建表了~)
```sql WITH aa AS ( SELECt 1 AS emp_id,'T0001' AS staff_no,'张三' AS employee_name UNIOn ALL SELECT 2 AS emp_id,'T0002','李四' UNIOn ALL SELECT 3,'T0003','王五' ), bb AS ( SELECT 1 AS emp_id,'语文' AS subject,60 AS "number" UNIOn ALL SELECT 1,'数学',70 UNIOn ALL SELECT 1,'英语',80 UNIOn ALL SELECT 2,'语文',80 UNIOn ALL SELECT 2,'数学',55 UNIOn ALL SELECT 2,'英语',90 UNIOn ALL SELECT 3,'语文',63 UNIOn ALL SELECT 3,'数学',77 UNIOn ALL SELECT 3,'英语',61 ) SELECT aa.emp_id, MAX(aa.staff_no) AS staff_no, MAX(aa.employee_name) employee_name, MAX( CASE WHEN bb.subject = '语文' THEN bb.number ELSE 0 END) AS "语文", MAX( CASE WHEN bb.subject = '数学' THEN bb.number ELSE 0 END) AS shuxue, MAX( CASE WHEN bb.subject = '英语' THEN bb.number ELSE 0 END) AS english FROM aa JOIN bb ON aa.emp_id = bb.emp_id GROUP BY aa.emp_id步骤二:eclipse里画cross table
data sourece:新建一个data source;用来配置数据库连接地址,连接账号密码
Driver Class: 根据自己的数据类型选择 例如sql/mysql
Database URL: 数据库URL地址
User Name:数据库账号
Password:数据库密码
输入这四项点击保存
打开eclipse,Data Sets文件夹新建一个new data sets(具体如何引用BIRT插件:自行百度)
点击刚刚创建好的文件,这里只用到Querry跟Preview Results
querry:将步骤一的sql代码全部复制进去
然后点击Preview Results,可以看到显示效果
Data Cubes----->右键 new Data Cubes
点击刚创建的data sets,命名为cross_report.rptdesign
主要配置groups and summarie:groups and summaries
groups(Dimensions):放需要分组的字段,拖拽Available Fields里的字段即可
summary fields(Measures):需要行转列的字段,拖拽Available Fields里的字段即可
点击data sets文件夹中,在cross_report.rptdesign插入交叉表
在cross_report.rptdesign文件中,右键insert---->cross tab
下图就是插入成功
将data sets 文件夹对应的值拖拽到cross_report.rptdesign,如下图
拖拽之后的效果
运行看效果
备注:如果想多几个输出列,点击输出列的图标,右键show/Hide Group levels



