静态转置

【问题】

I have these rows from the SQL:

'201401';'t';2000;'F'
'201401';'t';9000;'M'
'201401';'f';12000;'F'
'201401';'f';7000;'M'
'201402';'t';2200;'F'

And I want to show them in on single jasper row:

PeriodoTitulares(sex M/F)Familiares(sex M/F)Total
201401       11000(9000/2000)19000(7000/12000)31000

【回答】

以下 SQL 可以解决该问题:

select periodo,
 tM+tF Titulares,
 CONCAT('(',tM,'/',tF,')') tsex,
 fM+fF Familiaresa,
 CONCAT('(',fM,'/',fF,')') fsex,
 tM+tF+fM+fF total
from(
 select periodo,
  sum(case when channel='t' and sex='M' then visit else 0 end)tM ,
  sum(case when channel='t' and sex='F' then visit else 0 end)tF ,
  sum(case when channel='f' and sex='M' then visit else 0 end)fM ,
  sum(case when channel='f' and sex='F' then visit else 0 end)fF
 from siteData1 group by periodo
) t

除了用 SQL 之外,还可以用 SPL 来准备报表数据源,且 SPL 可用于数据来源不是数据库的场景:

A
1=myDB1.query("select * from siteData1").record([201403,"t",4000,"F"])
2

=A1.group(periodo;

(a=~.align(["tM","tF","fM","fF"],channel+sex).(visit),a(1)+a(2)):Titulares,

"("+string(a(1))+"/"+string(a(2))+")":tsex,

a(3)+a(4):Familiares,

"("+string(a(3))+"/"+string(a(4))+")":fsex,

sum(a):total )

结果如下:

imagepng

对于 Jasper 中复杂的数据准备,很多都可以用 SPL 来实现,关于 SPL 函数的用法介绍可参考在线文档《函数参考》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值