当前位置:首页 » 编程语言 » sql复杂报表
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql复杂报表

发布时间: 2022-11-12 10:22:33

Ⅰ java导出报表70多个字段sql比较复杂,有没有什么好的实现工具,能保证报表速度(排除sql外)

您好,用SSAS吧,都有.
我们公司系统是这样实现的.
1.用一个函数得到一个明细表,该明细表包括用户感兴趣的各个维度,并且该函数的参数是用户感兴趣的查询条件.
2.按用户要求先将用户需要的维度列出来,比如说按时间断,按商品类型,按门店,地区等等.然后给每一种方式在第1步的基础上动态生成SQL语句.至于交叉,就要先从第一步中获取交叉值列表,比如说按地区交叉,则先从第一步的表中将所有的地区查出,再用case when生成动态的行列转换语句.
3.一般来说,用前两步就已经能达到用户的要求,我们公司还有一个数据分析的图形化工具,也是在第一步的基础上,由用户自定义维度和深度的,实现方法就不知道了,应该是mdx来的
简单举个例子,比如说要对公司销售数据进行统计,维度包括 时间,地区,商品品牌,查询销量,销售金额
那可以用一个函数 fn_getSales(beginday,endday,area,matgroup),四个参数由用户在界面上选择或输入,函数从销售明细表中返回一个表,包含 时间(day),区域(area),商品品牌(brand),销量(digit),销售金额(totalmoney)的明细数据表.
统计的话,比如说要按商品品牌分组,那只要生成动态语句:
select matgroup,sum(digit),sum(totalmoney) from fn_getSales(beginday,endday,area,matgroup) group by matgroup即可.
如果要按地区进行交叉,按商品品牌分组的统计数据,则先取得地区列表
select area from fn_getSales(beginday,endday,area,matgroup) group by area
将得到的area记录下来,到一个数组,或到一个临时表都行
然后拼装行列转换的SQL语句
select matgroup,
sum(case 地区1 then digit else 0 end) as 地区1销量,
sum(case 地区1 then totalmoney else 0 end) as 地区1销售金额,
sum(case 地区2 then digit else 0 end) as 地区2销量,
sum(case 地区2 then totalmoney else 0 end) as 地区2销售金额,
....循环将所有的地区这样列出
from fn_getSales(beginday,endday,area,matgroup)
这样就得到了每一种商品在每个地区的销量和销售金额分布情况
如果这种东西写多了你就会发现完全可以将拼装方法固定下来,都是有规律的,你可以写一个专门用于拼装SQL的类,这时候就会很容易了。

Ⅱ 现有MYSQL数据库,如果要制作复杂的EXCEL报表改怎么办

如果你会制作复杂的EXCEL报表,那剩下的问题就是怎样把MYSQL数据库的数据导到EXCEL里了,这一般需要编写一个程序将把MYSQL数据库的数据导到EXCEL里(要是这个程序不会写那就上网搜搜看能不能搜到,或者再发一个问题问,或者请会的人写)。
如果你把MYSQL数据库的数据导到EXCEL里之后还是不会制作复杂的EXCEL报表,那你就要好好学学EXCEL报表的制作了。

Ⅲ 快逸报表中复杂sql怎么使用参数进行判断

做报表的时候需要写SQL语句,你的SQL语句应该包含你定义的变量,估计你是定义了参数,但并没有把参数用在SQL中 看看你的SQL和你的参数

Ⅳ SQL 统计报表

-- create sample table
create table tab1 (id int, output_style char(1), amount int, output_date date);

insert into tab1 values(1,'D',1000,'2009-11-12');
insert into tab1 values(2,'C',1000,'2009-11-12');
insert into tab1 values(3,'G',1000,'2009-12-12');
insert into tab1 values(4,'Z',1000,'2010-01-01');
insert into tab1 values(5,'D',1300,'2009-11-12');
insert into tab1 values(6,'C',1400,'2009-11-12');
insert into tab1 values(7,'G',2000,'2009-12-12');
insert into tab1 values(8,'Z',1000,'2010-01-01');

-- query
select concat(year(output_date), month(output_date)) as yearmonth,
sum(case when output_style='C' then amount else 0 end) as C_Amount,
sum(case when output_style='G' then amount else 0 end) as G_Amount,
sum(case when output_style='Z' then amount else 0 end) as Z_Amount,
sum(case when output_style='D' then amount else 0 end) as D_Amount from tab1 group by output_date

Ⅳ 写复杂SQL语句能力(电信行业报表SQL)

首先,我想说的是千万不要太着急,复杂的东西都是从简单开始的,你现在基本的东西都已经掌握了,现在主要是把基本的东西怎么组合起来。我也是在移动做运维的。刚开始情况跟你是一样的。
然后在看复杂SQL时,最好是能知道这个SQL是要完成什么目标的。(以下是我个人的方法)先看from,再看select的内容,再看where条件,对于group by ,join 可以更具select的内容一个一个的去看关联,如果太多可以用笔记一下。(不要想着能把所有脚本内容都能熟悉,我猜你们那的脚本也是经过很多人完成的,一个人一个思想,自己去琢磨别人的思想,确实比较难)。查找SQL问题要多看日志,从日志去定位出问题的脚本位置,慢慢的看的遍数多了,你也就熟悉了。(还是要说一下,千万不要急,每个人都是从不会到会,再到精通的)。
对于各种处理字段的函数,一定要多在网上搜一下,多理解一下这个函数的作用,这样才能灵活运用。
shell脚本的编写,可以先看一下基础教程,网上很多的,然后编写一下练习题,多看一下你们公司现有的资源,然后对照着你不懂的脚本,再去网上或书上去找答案,这样会加深你的理解。
先说到这吧,希望能对你有点帮助,有问题可以再互相沟通。(千万不要急奥,向着自己的目标前进吧。)

Ⅵ 用SQL查询报表

#我看了你的描述,也没给出表与表之间的关系和字段,以我的理解后,写出以下sql语句,经过测试,可以执行成功
#FeeTable:生活费表包含(学生信息表)也就是外键
#Student:学生信息表包含(班级信息表)也就是外键
#Greade:班级信息表

select
s.nameas学生名称,
g.nameas班级名称,
s.genderas学生性别,
s.teacheras招生老师,
f.liveFeeDateas生活费日期,
f.liveFeeas生活费,
f.sleepFeeDateas住宿费日期,
f.sleepFeeas住宿费,
fareFeeDateas校车费日期,
fareFeeas校车费,
(f.liveFee+f.sleepFee+fareFee)as费用合计
.id=f.studentinnerjoinGreadegons.greade=g.id
groupbys.name,g.name,s.gender,s.teacher,f.liveFeeDate,f.liveFee,f.sleepFeeDate,f.sleepFee,fareFeeDate,fareFee
以上SQL语句要结合你的表结构来适当调整表名、字段、和关联。
希望能帮到你!

Ⅶ 如何使用报表工具创建复杂的动态查询

默认情况下,变量列表的类型只有在数据源字典连接后才会被填充。因此,在第一次连接的时候,该变量为空。表达式Variable1.ToQueryString()抛出一个空字符串,整个查询会抛出错误。了避免这种情况,我们需要一个额外的检查步骤。
在报表开发工具中使用动态SQL查询功能
在这个例子中,所有的数据将会显示,在你单击按钮提交(Submit),该报表将只使用选定的数据进行重建。
当你只需要浏览需要数据时,可以做以下操作:
1、设置报表属性report.RequestParameters为true。点击提交按钮前,空报表页会被显示,点击后渲染开始。
2、用附加值初始化报表变量。
本回答由网友推荐

Ⅷ 如何解决报表的 SQL 植入风险

SQL 注入或者 SQL 植入是 WEB 应用程序与数据库交互过程中,由于对用户输入数据的合法性、规范性检测做的不严而导致的一种常见的漏洞,这种漏洞如果被攻击者加以利用,在查询语句的结尾添加非法的 SQL 语句,就能进行非法的查询,会导致数据泄露,风险很大

报表应用作为一个 WEB 应用,同样会面临这样的风险

为了解决普通参数查询不灵活,不自由的问题,很多报表工具开放了动态拼 SQL 的功能,允许 SQL 中进行子句替换,类似这样:

SELECT … FROM T WHERE ${w}

w 就是可以根据用户需求随意拼的,比如 data>… AND date<=… AND area=…

这样查询就灵活多了,但是风险也就来了,这个 w 就会有 SQL 注入的隐患,比如:

SELECT … FROM T WHERE 1=0 UNION SELECT … FROM user

这是一句可执行的合法 SQL,但 user 表中的信息就被泄露了

怎么样解决这个问题呢?

1 尽量使用普通的 SQL 参数,不要动态拼 SQL
这样做,虽然灵活度差一点,但安全
有些报表工具不支持普通 SQL 参数,只提供拼 SQL 的方案,方便是方便了,但就要小心了

2 需要通用查询时,写复杂一点的 SQL

比如:

SELECT … FROM T WHERE (${w})

SELECT … FROM T WHERE (${w}) OR ${w}

这样做有一定的效果,但是并不完美,有些时候也防不住,而且 SQL 复杂后,会影响执行效率

3 再检查关键字
通常通用查询的条件不会有这些 select,from 等关键字,所以可以通过过滤这些关键字来防范风险,不让参数中有这些关键字的 SQL 执行,虽然这样做有时候会失去一些灵活性,但是安全性却更高了

润乾报表把这些都做好了,直接用就可以了

我们就以润乾报表为例,来简单看一下实现步骤

部署润乾报表后,在应用目录下找到 **raqsoftConfig.xml ** 文件,配置敏感词列表

属性名:disallowedParamWordList,value 为禁用敏感词列表,多个之间用逗号分隔,英文字母不区分大小写

配置列表以后,如果访问的 URL 中再出现敏感词,就会提示出错了,减少风险的发生

http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=a.rpx&arg2= 华北 union select * from users

是的就这么简单,在一个已经提供了防止 SQL 注入的工具中,就是这么轻松一步设置就可以规避风险了,所以选型的时候,多问问,看看各厂商是否能解决这问题,怎么解决的,否则就得自己去费劲去修补这个漏洞了

更详细的操作以及其他解决方式请参考: 报表的 SQL 植入风险及规避方法 - 乾学院

Ⅸ SQL 怎么建立报表

use pubs if exists (select * from sysobjects where name = 'BonusPenalty_info') drop table BonusPenalty_infocreate table BonusPenalty_info([id] nvarchar(20) primary key,[name] nvarchar(20) not null,BonusPenalty_Time nvarchar(50) not null,BonusPenalty_sort nvarchar(50) not null,BonusPenalty_content nvarchar(50) not null,Approve nvarchar(50) not null,RecallCause nvarchar(50) not null,BonusPenalty_Cause nvarchar(50) not null,Remark nvarchar(50) not null,Dept nvarchar(50) not null,)select * from BonusPenalty_info

Ⅹ 业务人员不会写sql,稍微复杂一些的报表就做不出来怎么办

很正常,业务人员对业务很熟悉,但是编程技术是硬伤。他们也会觉得我本来就是做业务的,干嘛要费劲学这些语法软件的。一般的数据分析软件需要拖拽字段,这些字段存储的名称并不明确,这也是主要的分析困难。建议试试帆软的商业智能产品finebi。它在数据字段选取转义这一块做得很好,甚至支持直接从excel里面取数。