sql报表制作
SQL关键字 where,类型转换Convert
历史数据,多久后的数据,假如有表A,有2个字段a,b
a 为int 类型,b 为日期类型
转换日期以及日期范围SQL 如下:
select * from A where b between convert(datetime,'2015-08-01 08:08:08' ) and convert(datetime,'2015-08-01 08:12:08')
以上SQL 就是查询历史记录,日期为'2015-08-01 08:08:08'与 '2015-08-01 08:12:08'
之间的数据
创建报表可以通过MicrosoftSQLServer2008R2中的创建,也可以在Microsoftvisualstudio中通过使用ReportView控件来创建报表。本实例采用MicrosoftSQLServer2008R2中的创建报表。
创建报表服务器项目
在制作报表之前,要先创建一个报表服务器项目,在其中可以存放若干报表供用户调用。在中创建报表服务器项目的操作步骤如下。
选择【开始】|【所有程序】|【MicrosoftSQLServer2008R2】|【】,启动商业智能开发环境。在菜单栏中选择【文件】|【新建】|【项目】命令,弹出【新建项目】对话框。在【项目类型】列表中选择【商业智能项目】选项,在【模板】列表中选择【报表服务器项目向导】选项,在【名称】文本框中输入【报表项目4】,单击【确定】按钮以创建项目。
Ⅱ 怎样在SQLServer中正确使用参数报表
一、带报表参数的典型应用。
在一个报表中加入参数,最直接的结果就是可以提高查询语句的重复利用性。如用户可以通过更改参数来调整显示的结果等等。对于这些常规的应用笔者不做过多的阐述。笔者现在要说的是,带参数报表的一些高级应用。
参数报表比较高级的应用就是实现报表钻取。钻取是改变维的层次,变换分析的粒度。它包括向上钻取和向下钻取。向上钻取是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;向下钻取是指自动生成汇总行的分析方法。简单的说,现在数据库中有一张销售订单表。根据这张表可以生成一张各个月份的销售统计表。但是,有可能用户在查看这张报表的时候,对某个月份的统计结果有怀疑,为此需要查看这个月份的销售明细。此时如果利用带参数的报表实现钻取功能的话,那么就不需要重新查询或者生成报表。而只需要直接在这张报表上点击月份,系统就会自动打开另外一张报表。这张报表中的内容就是这月份的销售明细。从技术的角度讲,就是通过参数的传递,将这张报表的时间信息作为另一张报表的查询参数。从而让系统自动根据这个参数来生成相应的数据,从而简化用户的操作。
二、带参数报表要避免注入式攻击。
在使用参数报表的时候,特别需要注意一点就是防止注入式攻击。注入式攻击各位读者或许都了解。可是对于为什么使用参数的报表容易引起注入式攻击,可能大家并不怎么了解。这主要是因为参数如果采用的是string数据类型所造成的。即如果参数采用的是string数据类型,那么就表示用户可以根据需要输入任何类型的字符串。此时如果用户输入了一些注入式攻击的代码当作参数,则就可能会导致注入式攻击。为此如果生成报表时,采用的参数时String数据类型的,就需要特别的注意。为了防止这个注入式攻击,笔者建议如果采用的参数一定要是String数据类型的话,那么最好能够遵循下面的规则。DB2数据库与SQLServer数据库的异同
首先,在客户端将报表查询语句传递给数据库之前,即将参数复制给Select语句之前,最好进行验证。即要验证输入的参数值中,是否存在一些特殊的符号。这些符号往往跟输入攻击有关。如果存在这些特殊字符的话,则需要向用户提供警告信息,表明存在注入式攻击的可能性。并且,系统可以拒绝接受这个参数。这个避免注入式攻击的方法比较消极。如果这些特殊符号确实是查询参数中包含的内容,那么也无法使用。
其次,可以通过值列表的方式来向数据库传递参数。在没有提供值列表的情况下,如果参数是字符类型的,则系统向用户显示的是一个可以使用任何值的文本框。此时数据库管理员可以使用可用值列表的方式来规范化参数的输入,限制其输入一些特殊的字符。也就是说,在定义String类型的参数报表时,让系统向用户显示一个下拉的列表框,然后用户通过选择来指定参数。这个操作就跟Excel表格中的下拉列框差不多,用户只能够选择数据库管理员所提供的值,或者说只能够选择某张表中存在的值。由于用户不能够自己输入值,而只能够选择,这就可以有效的避免注入式攻击。不过采用这种方式有一个缺陷,就是如果有效的值太多的话,这个列表就会很长。为此用户在选择参数的时候,就会很麻烦。如当有效值有500个的话,那么就需要在500个值中选择一个值,显然这有点困难。即使按照参数的名字顺序来排列,选择也是比较麻烦的。大内存SQLServer数据库的加速剂
第三,可以利用列表查询的方式,来避免注入式攻击。即当用户输入一个参数之后,系统会自动从一个列表中查询是否存在这个值。如果存在的话,则将这个参数赋值给查询语句中的变量。如果不存在的话则提醒用户参数可能输入错误。如现在有一张销售订单明细报表。用户可能需要根据订单号码来查询销售订单明细。此时这个订单号码就是一个字符型的参数。当用户输入这个参数的时候,并不是马上传递给数据库,这么做太危险,容易产生注入式攻击。而是前台应用程序也从后台数据库中取得所有的销售订单的订单号码信息。当用户输入参数之后,前台应用程序会把这个用户输入的参数跟自己查询出来的信息先进行对比。如果有匹配的信息,就将这个参数传递给后台数据库。如果没有的话,就向用户报告错误的信息。有些应用程序在设计的时候,还会更进一步。如客户端程序会先从数据库中取得订单号码与对应的订单ID。当用户输入参数之后,会进行比对。如果比对成功的话,那么客户端应用程序会将这个订单号码对应的订单ID作为参数传递给查询语句。也就是说,从数据库服务器角度来讲,真正的参数是订单ID(整数型数据类型)而不是订单号码(字符串数据类型)。通过这个数据类型转换,从而可以从根本上防止注入式的攻击。
以上三种方式都可以很有效的避免注入式攻击。数据库管理员需要根据实际应用来选择合适的解决方案。如当有效值比较少的时候,如按年份来统计销售订单时,则可以使用列表的形式。当有效值比较多,特别是这个有效值会自动增长的时候,则可以使用列表查询的方式。总之一个基本的原则,对于String参数,一定要进行验证其合法性。否则的话,很容易造成注入式攻击。
三、对于日期型的数据给与特殊的照顾。
日期型的数据是数据库中最容易出现问题的一个数据类型。因为不同语言环境下,如英语与汉语环境下,其采用的日期格式是不同的。如果数据库中定义了某个日期格式,而输入的参数如果不符合这个格式的话,则系统就会认为这条记录不存在,从而在报表中查询不到相关的数据。为此如果在报表中要使用日期型数据参数的话,将会是一件比较麻烦的事情。所以,在应用程序设计时,数据库管理员最好提醒前台应用程序的设计者,能够规范化日期的格式。如可以要求他们,对于日期型的数据作为参数时,用户不能够手工输入日期。因为不同的用户输入习惯不同,如有些人会按年月日的格式输入(有些用户会把8月份写成08,而有些直接写成8),有些人则会按月、日、年的格式进行输入。由于格式不统一,那么数据库就很难按照同一个规则进行转换。为此,对于日期型的数据作为参数时,最好在前台应用程序中能够规范化输入的格式。如以一个统计的格式输入。要做到这一点的话,就可以通过一个日期型的控件来完成。即用户不能够手工输入日期型的数据。当遇到某个参数时日期型的数据时,当鼠标定位到这个文本框,则系统就会弹出一个类似日历的界面。用户只有通过选择日期来输入日期型的数据,从而规范化用户的输入。另外也可以通过掩码的方式来规范用户输入的格式。即预先规定年月日的输入掩码。用户在输入的时候必须按照这个格式,否则的话,系统不会接受用户的输入。这两种方式都可以实现对日期数据的规范化。
当用户按照同一个格式输入日期数据后,以后的工作就容易处理了。在将参数传递给数据库的时候,可以在查询语句中加入一个日期型数据的强制转换语句。将输入的日期型数据按照系统表中定义的日期型数据进行转换。即如果前台客户端输入的日期型数据格式是日、月、年(只要输入的内容统一即可,没有具体的要求),然后在查询语句中就可以通过数据类型转换工具对数据类型进行转换。如将日、月、年表示的字符型数据类型表示会年、月、日的日期型数据类型。如此的话,就可以保证用户输入的参数是数据库可以识别的。就可以避免因为日期格式不一致或者数据类型不一致而导致报表不能够抓取记录。
Ⅲ 复杂数据报表的sql 编写求助
本人也是做这行的,有11年了,就你的问题只想跟你说:
1、SQL语句其它没什么难度,首先了解左连接,右连接,全连接这三个方面的内容。
2、复杂SQL也是基于简单SQL的基础上,是一种简单SQL的灵活应用已。
3、有前辈带领的环境下,最好向前辈门多多提问,不用看书,看一天书,不如前辈一分钟的指导
4、业务部门有报表需求时,你要求接个简单的,或从前辈那接过来,亲自完成,但代码一定要亲自写,不懂问前辈,这比什么进步都快。
5、我带过很多的徒弟,一般这么要求他们,进步也很快,保证3次之后可独立完成。
Ⅳ 报表开发就是写sql吗
SQL是报表开发的一部分。报表是把数据进行可视化,你需要设计报表的样式,包括数据展现、整体布局、图表配色等等。
报表其实就相当于做产品,我们目的是要让用户(业务、领导)满意,愿意看,愿意用。
同时,做好报表一定要懂业务,业务知识的掌握往往就成为了报表人能力的分水岭。
做报表是需要动脑的,SQL只是需要掌握最基础的。
Ⅳ 怎样建立数据库表格
如何在excel中创建“数据库”
excel是一个自由表,一个EXCEL的工作薄就是一个数据库,它里面的每一张表就是数据库的表,你可象操作表一样对其进行查询等操作,它里面的列就是数据库的字段,行就是记录,因此你可以按数据库的架构来组建数据,只是你如果你组建的数据不符合数据库的规则,在查询时不能得到时相应的结果。因此在EXCEL中不存在创建数据库。但对存在的数据可以引用。当满足条件A、B、C、D……时引用是可以的,但如果是在EXCEL中直接引用是不行的,一种是用VBA利用ADO访问EXCEL,在查询时把A、B、C、D几个条件按SQL语法写进查询语句中,引用返回的记录集,一种是利用函数把满足A、B、C、D的记录筛选出来,然后再引用。
怎么在SQL数据库中新建表。
可以有两种办法啦:
1.在企业管理器里面建:这种方法很简单点击选中的数据库右键新建即可相信你应该会不多说了。
2.在查询分析器里建:基本思路要建表,表是要在库里建的所以你要先引用你要使用的数据库加进来再开始建表,以下为一陪扮个简单实例;
create database student --创建一个student数据库由于这里主要说建表所以建一个简单的数据库
use student --引用数据库student
create table Test( --创建一个Test表
name varchar(20) primary key indentity(1,1),--列名(字段名) 数据类型 在此加主键约束就不用加非空约束 再加上自动增长列(含义从1开始增长增长量是1)
password varchar(10) not null --注意建表最后一个字段名时结尾不要加逗号否则会出错
)
sqlserver 下怎么建立数据库 怎么建表
方法/步骤
1
首先我们打开SQL SERVER自带的数据库管理工具,从开始菜单中可以找到,如图点击进去;
2
开始连接SQL SERVER服务器,就是我们装好的SQL SERVER 服务器;
3
右击数据库悉仿,选择第一个,新建一个数据库;
4
填写数据库的名称,下面是设置自动增长的,一般不用管,默认
5
点击确定后就可以生成一个数据库,此时里面是没有表的;
6
右击表新建一个表,填写你要的字段名称
7
填完字段名称后点击字段名称那个内部窗口的小叉叉,然后就睁乱纤提示你输入表名了,填写下表名,一个数据库的建立过程就是这样的;
或者
create database stuDB
on primary -- 默认就属于primary文件组,可省略
(
/*--数据文件的具体描述--*/
name='stuDB_data', -- 主数据文件的逻辑名称
filename='D:\stuDB_data.mdf', -- 主数据文件的物理名称
size=5mb, --主数据文件的初始大小
maxsize=100mb, -- 主数据文件增长的最大值
filegrowth=15%--主数据文件的增长率
)
log on
(
/*--日志文件的具体描述,各参数含义同上--*/
name='stuDB_log',
filename='D:\stuDB_log.ldf',
size=2mb,
filegrowth=1mb
)
怎样建立一个简单数据库?
把excel导入数据库,不出现表格嵌套可以使用下面这个方法导入;
思路:
(1)、把excel数据读入到dataset中;
(2)、建立相应结构的数据表格
(3)、把dat畅set中的数据更新到数据表中
如何在数据库中建立表
Create table 表名字
(表栏名1 数据类型,
表栏名2 数据类型,
表栏名3 数据类型,
表栏名4 数据类型);
例如:
Create table 上课表
(学生 Varchar(10),
学号 Number(10));
如何建立一个新的ACCESS表格
新建一个数据库有两种方法:一种是创建一个空数据库,即建立一个没有表、查询、窗体和报表等内容的数据库;另一种方法是使用Access中提供的数据库模板创建数据库,即通过对向导所提出的选项和不同选择来设计窗体、查询和报表等,从而建立一个完整的数据库。这里我们将使用第一种方法:
Step1:在Access窗口中单击 “文件(F)”菜单,在下拉菜单中选择 “新建”项,将得到对话框。
“新建”对话框
双击 “数据库” 图标,即会显示 “文件新建数据库” 对话框,
Step3:在文件名文本框中输入要保存数据库的文件夹及新建的数据库名,如 “C:\test”,然后选择 “确定”。即可创建好一个名为 “test” 的数据库。
二.添加数据表
表是Access数据库的基础,是信息的载体。其它对象如查询、窗体和报表,也是将表中的信息以各种形式表现出来,方便用户使用这些信息。在Access中,创建表的方法有三种:一是使用设计器创建表;二是通过输入数据创建表;三是利用向导创建表。在这里,我们采用第一种方法创建表:
Step4:在窗体中,双击 “使用设计器创建表”,则会出现对话框。
表设计器对话框
Step5:在“字段名称”列的第一行中输入authors表的第一个字段的名字 id。然后按回车键,此时在“数据类型”列中会显示出一个按钮,单击按钮,在弹出的下拉列表中选择“文本”选项,设置 id 字段的类型为文本型。
设置字段数据类型
Step6:在“字段属性饥域的“常规”选项卡中,可以设置字段的大小、格式和规则等。如我们可以把id字段的长度大小设置为12,并且规定其不能为空,因此,可以设置如下:在 “字段大小”文本框中输入12,在 “必填字段”文本框中输入“是”,在“允许空字符串”文本框中输入“否”。
设置字段属性内容
Step7:重复上述方法,添加其它字段,并设置其属性。
Step8:设置完成后,单击 “文件(F)”菜单,在下拉菜单中选择 “保存”项,将会出现一个如图1.8的对话框,在“表名称”文本框中输入表名 authors,单击确定按钮。
“保存”对话框
Step9:此时,系统会提示用户建立一关键字段。一般情况下单击“是”完成即可。
如何用mysql创建创建博客数据库表
1.创建一个数据库为test_db
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
切换到test_db上
mysql> use test_db;
Database changed
mysql>
2.创建一个表tb_emp1
create table tb_emp1
(
id INT(11),
name VARCHAR(25),
deptid INT (11),
salary FLOAT
);
mysql> create table tb_emp1
-> (
-> id INT(11),
-> name VARCHAR(25),
-> deptid INT (11),
-> salary FLOAT
-> );
Query OK, 0 rows affected (0.09 sec)
MYsql数据库怎样创建表? 20分
CREATE DATABASE cookbook; 创建一个叫“cookbook”的数据库
USE cookbook; 使用cookbook这个数据库
CREATE TABLE limbs (thing VARCHAR(抚0),legs INT,arms INT); 创建表“limbs”其中包括thing,legs,aems 字段
创建表的命令是 CREATE TABLE 表名称
后面括号里的内容是表中字段的属性
如何 SQL创建表
商品表
create table proct
(
proid varchar(20) primary key,
proname varchar(50),
proprice money,
procount int
);
顾客表
create table customer
(
custno varchar(20) primary key,
custname varchar(50),
custsex varchar(10),
custage int,
custtel varchar(20)
);
订单表
create table orderitem
(
custno varchar(20),
proid varchar(20),
ocount int,
oprice money,
odate date
);
外键
alter table orderitem add constraint fk_custno foreign key(custno) references customer(custno);
alter table orderitem add constraint fk_proid foreign key(proid) references proct(proid);
SQL数据库怎么创建表.
CREATE TABLE [dbo].[student]( [学号] [CHAR](8) NOT NULL, [姓名] [CHAR](8) NULL, [性别] [CHAR](2) NULL, [年龄] [INT] NULL, [联系方式] [CHAR](11) NULL, [所在院系] [CHAR](20) NULL, CONSTRAINT [PK_student] PRIMARY KEY CLUSTERED ( [学号] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NOREPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK_student] CHECK (([性别]='女' OR [性别]='男'))GOALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK_student]GOALTER TABLE [dbo].[student] WITH CHECK ADD CONSTRAINT [CK_student_1] CHECK (([联系方式] LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))GOALTER TABLE [dbo].[student] CHECK CONSTRAINT [CK_student_1]GOALTER TABLE [dbo].[student] ADD CONSTRAINT [DF_student_所在院系] DEFAULT ('电信系') FOR [所在院系]GO
Ⅵ 哪种报表工具,可以很简便的从SQL数据库中提取数据,生成想要的报表
有以下几种报表工具都可以实现:1、 思迈特软件Smartbi的大数据分析软件:
“思迈特软件Smartbi”是企业级商业智能和大数据分析品牌,经过多年持续自主研发,凝聚大量商业智能最佳实践经验,整合了各行业的数据分析和决策支持的功能需求。满足最终用户在企业级报表、数据可视化分析、自助探索分析、数据挖掘建模、AI智能分析等大数据分析需求。
2、MySQL Workbench:
MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是着名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移,MySQL Workbench是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化的两个版本。
3、数据库管理工具 Navicat Lite:
NavicatTM是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资料库管理员、开发人员及中小企业的需求。 Navicat是以直觉化的使用者图形接口所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。
报表工具靠不靠谱,来试试Smartbi,思迈特软件Smartbi经过多年持续自主研发,凝聚大量商业智能最佳实践经验,整合了各行业的数据分析和决策支持的功能需求。满足最终用户在企业级报表、数据可视化分析、自助探索分析、数据挖掘建模、AI智能分析等大数据分析需求。
思迈特软件Smartbi个人用户全功能模块长期免费试用
马上免费体验:Smartbi一站式大数据分析平台
Ⅶ 用sql语句做报表,怎么算折扣和工资
--mssqlserver:
selecta.日期,a.物料,a.工序,a.设备,a.班组,a.操作工,a.数量,a.单价,
(
casewhenb.物料种类数>1orb.物料种类数=1andc.设备种类数>1andd.工序种类数=1then0.8else1end
)as折扣,
a.数量*a.单价*(
casewhenb.物料种类数>1orb.物料种类数=1andd.工序种类数=1andc.设备种类数>1then0.8else1end
)as工资
from表名aleftjoin
(select日期,count(物料)as物料种类数,操作工from表名groupby日期,操作工)b
ona.日期=b.日期anda.操作工=b.操作工
leftjoin
(select日期,count(设备)as设备种类数,操作工from表名groupby日期,操作工)c
ona.日期=c.日期anda.操作工=c.操作工
leftjoin
(select日期,count(工序)as工序种类数,操作工from表名groupby日期,操作工)d
ona.日期=d.日期anda.操作工=d.操作工