简单说就是按天求和当天的班组日产值。不要问我日产值是什么。我也不知道。我原来的做法是在应用层多次查询数据库并将获得的结果集整合出一张报表。但是那位老哥不知道用了C++的什么组件DAO返回的结果集不能通过程序修改,只能直接在页面呈现。这可要了我的老命。经详细研究写出了如下语句。最终可实现需求。那个数据神马的我就不提供插入语句了大家心领神会就好。
其实简单的思路就是把一条条的SQL片段拼装成一条SQL语句。哦对了,如果使用如下方式的话建议发在存储过程中,我比较懒就没写。大家多多包含。最后需要说的是建立表的时候用中文真心不好,还是用英文吧。或许有的人会问,为什么例子是中文的呢?回答是表结构是他给的我怕换了他看不懂……残念啊!具体每条语句的意义详见注释。如果是其他数据库也可以仿照这个例子写。因为原理是不变的。唯一有问题的是如果时间太多会造成SQL片段过长的问题。需要注意!OK其他的看代码吧,不解释了!
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rcllr]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[rcllr]
CREATE TABLE [dbo].[rcllr] (
[订单编号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[分公司] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[投产班组] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[班组人数] [int] NULL ,
[出工人数] [int] NULL ,
[班组日产量] [int] NULL ,
[产量日期] [datetime] NULL ,
[班组日产值] [numeric](18, 2) NULL ,
[班组完成任务数] [int] NULL ,
[班组剩余任务数] [int] NULL
) ON [PRIMARY]
declare @starttime datetime,@endtime datetime,@sql varchar(2000)
set @starttime = '2012-05-01';--起始时间
set @endtime = '2012-05-06';--结束时间
set @sql = 'select 分公司';--需要查询什么字段在这里拼装
while @starttime < @endtime
begin
print @starttime
set @starttime = @starttime+1
--'''表示输出一个单引号
--'''+Convert(Varchar(10),@starttime,120)+'''表示 将变量@starttime转换为字符串 '2012-05-05'
set @sql = @sql +',(select sum(班组日产值) from rcllr M where M.分公司=N.分公司 and M.产量日期='''+Convert(Varchar(10),@starttime,120)+''') as '''+Convert(Varchar(10),@starttime,120)+''''
set @sql = @sql+' from rcllr N group by 分公司'--其他查询条件在这里拼装
exec(@sql) --执行SQL
print @sql --打印SQL
是在年提出的一种关系数据库语言。
由于语言接近英语的语句结构,方便简洁、使用灵活、功能强人,倍受用户及计算机工业
界的欢迎,被众多计算机公司和数据库厂商所采用,经各公司的不断修改、扩充和完善,语
言最终发展成为关系数据库的标准语言。
的第一个标准是年月由美国国家标准化组织公布的
数据库语言
年国际标准化组织也通过了这一标准。以后通过对
的不断修改和完善,于年第二次公布了标准
年又公布了标准
。最新的标准是
《信息技术——数据库语言》发布。我国也相继
公布了数据库语言的国家标准。
成为国际标准以后,其影响远远超出了薮据库领域。例如在
软件工程、人工智
能、分布式等领域,人们不仅把作为检索数据的语言规范,而且也把作为检索图形、
图象、声音、文字等信息类型的语言规范。目前,世界上大型的著名数据库管理系统均支持
等。在未来相当长的时间里,仍将是数据库领
域以至信息领域中数据处理的主流语言之
由于不同的产品,大都按自己产品的特点对语言进行了扩充,很难完全符合
标准。目前在
市场上已将的符合夲作为衡量产品质量的重要指标,并研制成专门的
测试软件,如
入门级和过渡级的符合率均达到,并且部分支持
标准。同时还兼容
的部分语言特性。本章主要
介绍系统所支持的语言
语言的特点
语言符合结构化査询语言标准,是标准的扩充。它集数据定乂、数据査
询、薮据操纵和数据控制于一体,是一种统一的、综合的关系数据库语言。它功能强大,使用简
单方便、容易为用户掌握
语言具有如下特点:
功能一体化
的功能一体化表现在以下两个方面
支持多媒体数据类型,用户在建表时可直接使用。系统在处理常规数据与
多媒体数据时达到了四个一体化:一体化定义、一体化存储、一体化检索、一体化处理,最大限
度地提高了数据库管理系统处理多媒体的能力和速度;
语言集数据库的定义、査询、更新、控制、维护、恢复、安全等一系列操作于
体,每一项操作都只需一种操作符表示,格式规范,风格一致,简单方便,很容易为用户所掌
两种用户接口使用统一语法结构的语言
语言既是自含式语言,又是嵌入式语言。作为自含式语言,它能独立运行于联机交
互方式。作为嵌入式语言,
浯句能够嵌入到和语言程序中,将高级语言也称主
语言灵活的表达能力、强大的计算功能与
语言的数据处理功能相结合,完成各种复杂
的事务处理。而在这两种不同的使用方式中,
语言的语法结构是一致的,从而为用户使
第1章结构化查询语言简介
用提供了极大的方使性和灵活性。
高度非过程化
语言是·种非过程化语言。用户只需指出“做什么”,而不需指出“怎么做”,对数
据存取路径的选择以及
语句功能的实现均由系统自动完成,与用户编制的应用程序与
具体的机器及关系
的实现细节无关,从而方便了用户,提高了应用程序的开发效率,也
增强了数据独立性和应用系统的叮移植性。
面向集合的操作方式
语言采用了集合操作方式。不仅查询结果可以是元组的集合,而且一次插入、删除、
修改操作的对象也可以是元组的集合,相对于面向记录的数据库语言一次只能操作一条记录来
语言的使用简化了用户的处理,提高了应用程序的运行效率
语言简洁,方便易学
语言功能强大,格式规范,表达简洁,接近英语的语法结构,容易为用户所掌握。
保留字与标识符
标识符的语法规则兼容标准
,标识符分为正规标识符和定界标识符两大类。
正规标识符以字母、、、或汉字开头,后面可以跟随字母、数字、、、或者汉字,正
规标识符的最大长度是个英文字符或个汉字。正规标识符不能是保留字
正规标识符的例子:,
定界标识符的标识符体用双引号括起来时,标识符体可以包含任意字符,特别地,其中使用
连续两个双引号转义为一个双引号
定界标识符的例子:
保留字的清单参见附录
语言的功能及语句
语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、查询
操纵和控制四个方面,通过各种不同的语句米实现。按照所实现的功能,
为以下几种
数据库、登录、用户、模式、基表、视图、索引、序列、全文索引、存储过程和触发器
的定义和删除语句,登录、基表、视图、仝文索引的修改语句,对象的更名语句;
査询(含全文检索)、插入、删除、修改语句;
数据库安全语句。包括创建角色语句、删除角色语句,授权语句、回收权限语句,修改
登录口令语句,审计设置语句、取消审计设置语句等。
在嵌入方式中,为了协调
语言与主语言不同的数据处理方式
了游标的概念。因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标
有关的语句:
游标的定义、打廾、关闭、拨动语句
游标定位方式的数据修改与删除语句。
为了有效维护数据库的完整性和一致性,支持
的并发控制机制
了事务的回滚(
)与提交(
)语句。同时允许选择实施事务级读一致
性,它保证同一事务内的可重复读,为此提供用户多种手动上锁语句,和设置事务隔离级别
第1章结构化查询语言简介
所支持的数据类型
数据类型是可表示值的集。值的逻辑表示是字值。值的物理表示依赖于实现。系统具
的绝大部分数据类型,以及部分
的数据类型。
常规数据类型
字符数据类型
语法:长度
数据类型指定定长字符串。在基表中,定义
类型的列时,可以指
定一个不超过的正整数作为字符长度,例如
如果未指定长度,缺省为。
确保存储在该列的所有值都具有这一长度。
数据类型的最大长度由数据库页面大
小决定,字符类型最大长度和页面大小的对应关系请见下表支持按字节存放字符
数据库页面大
数据类型指定变长字符串,用法类似
数据类型,可以指定一
个不超过的正整数作为字符长度,例如:
。如果未指定长度,缺省为
在系统中,
数据类型的实际最大长度由数据库页面大小决定,具体最
大长度算法如表
的区别在于前者长度不足时,系统自动填充空
格,而后者只占用实际的字节空间。
数据库页面大
实际最大长度
注:这个限制长度只针对建表的情况,在定义变量的时候,可以不受这个限制长度的限
数值数据类型
现在要查询Customer的不同名字分别有多少个,并且要如下显示:
1、于是我想到了用group by,那么使用下面的语句:select COUNT(Customer) as Customers from oorders GROUP by customer会发现查出来的结果是这样
SELECT “A厂” ,定额名称,规格,year(日期) as 年份,数量 FROM [材料进货明细表$]
SELECT “A厂” as 工厂 ,定额名称,规格,year(日期) as 年份,数量 FROM [材料进货明细表$]
比较一下上面两句SQL语句的区别,没有as 工厂与有as 工厂的区别
二、选择表中若干元组
1、消除取重复的行
例4、查询材料进货明细表的定额名称
SELECT 定额名称 FROM [材料进货明细表$]
该查询结果会包含很多重复的行。消除重复行的话,必须指定关键词
distinct
SELECT distinct 定额名称 FROM [材料进货明细表$]
2、查询满足条件的元组
例5、查询材料进货明细表中单位为“套”的所有记录
SELECT * FROM [材料进货明细表$] where 单位= ‘套’
本句语句中,要学会where的用法:
要查询满足指定条件的元组,可以通过where子句实现。where子句查询条件是:
比较: =,>,<,>=,<=,!=,<>,!>,!<;not +上述比较运算符
确定范围: between and ,not between and
确定集合:in,not in
字符匹配:like,not like
空值:is null,is not null
多重条件:and,or,not
例6、查询材料进货明细表中数量在50—100之间的所有记录
SELECT * FROM [材料进货明细表$] where 数量 between 50 and 100
如果是不在50-100之间的话,直接改成:
SELECT * FROM [材料进货明细表$] where 数量 not between 50 and 100
例7、查询材料进货明细表中单位为“只”或“支”的所有记录
SELECT * FROM [材料进货明细表$] where 单位 in(‘只’,'支’)
3、字符匹配
可以用like来实现,通配符%和_
a、%代表任意长度的字符串,如a%b表示以a开头,以b结尾的任意的字符串
b、_代表任意单个字符
例8、查询材料进货明细表中定额名称以“天津”开头的所有记录
SELECT * FROM [材料进货明细表$] where 定额名称 like ‘天津%’
例9、查询材料进货明细表中定额名称以“天津”开头且字符为4个的所有记录
SELECT * FROM [材料进货明细表$] where 定额名称 like ‘天津__’
例10、查询材料进货明细表中定额名称不以“天津”开头的所有记录
SELECT * FROM [材料进货明细表$] where 定额名称 not like ‘天津%’
4、涉及空值的查询
主要是以:null出现
例11、查询材料进货明细表中规格为空的的所有记录
SELECT * FROM [材料进货明细表$] where 规格 is null
5、多条件查询
例12、查询材料进货明细表中定额名称为“天津三通”的并且数量大于30的所有记录
SELECT * FROM [材料进货明细表$] where 定额名称 = ‘天津三通’ and 数量>30
三、order by 子句
desc(降序)、asc(升序)
例13、查询材料进货明细表中数量大于30的所有记录,并且要按照数量来降序排列。
SELECT * FROM [材料进货明细表$] where 数量>30 order by 数量 desc
四、聚集函数
count(distinct/all 列名):统计元组个数
sum:求和
avg:求平均值
max:最大值
min:最小值
例14、查询材料进货明细表中天津大小头的最大数量。
SELECT max(数量) FROM [材料进货明细表$] where 定额名称 = ‘天津大小头’
或:SELECT max(数量) as 最大数量 FROM [材料进货明细表$] where 定额名称 = ‘天津大小头’
2. Excel源数据及分析下载:Excel数据透视表教程:分类百分比
SQL语句:
select *, Hz1.分类销量/Hz2.分类销量 as 分类百分比 from
(select 品种,分公司, sum(数量) as 分类销量 from [数据$] group by 品种,分公司) Hz1,
(select 分公司, sum(数量) as 分类销量 from [数据$] group by 分公司) Hz2
where hz1.分公司=Hz2.分公司
SQL语句解释:
select 品种,分公司, sum(数量) as 分类销量 from [数据$] group by 品种,分公司
实现对品种、分公司两字段分组的统计求和
select 分公司, sum(数量) as 分类销量 from [数据$] group by 分公司
实现对分公司字段分组的统计求和
对分公司分组统计求和数是对品种、分公司两字段分组统计求和项目再对不同品种的总就和,也就是后者包含前者。
整句语句的意思就是,将两个查询结果作为新的查询表分别命名为Hz1、Hz2,用 ”where hz1.分公司=Hz2.分公司“来组合数据,
没有条件的制约的话,将统计的结果再进行除数运算,
各品种的分组统计数(分组含品种字段)除以各品种已求和了的分组统计数(分组不含品种字段)求得所占比率,
最后在字段单元格设置为百分数就可以了。
在Excel中使用MS Query查询外部数据库的内容的优点是:不用设置公式、编写VBA代码、源数据库不用打开。
但要注意:源数据库的记录要有字段名,由于设置查询时的路径固定,。
因此源数据库文件不能随意移动(如确实要移动可以通过手工修改查询或VBA解决)
以下示例采用MS Query在“查询”工作簿中查询关闭的“销售”工作簿中sheet1的指定
“店铺”和指定“颜色”的内容(sheet1有“店铺”、“数量”、“颜色”等字段名及若干数据)。
操作前请先确定是否安装有MS Query。附上举例文件,请解压到D盘根目录下:
销售.xls为源数据,查询.xls中设置了msquery查询。
下载:MS Query查询未打开工作簿的内容例子
1、 新建一个工作表,选择菜单【数据】—【导入外部数据】—【新建数据库查询】,
界面如图,由于查询excel数据库的内容,因此选择【Excel Files*】并确定;
2、 弹出〖选择工作簿〗对话框,选择“销售”工作簿,〖确定〗;
3、 弹出〖选择列〗对话框,如果此时弹出“没用内容”,确定后在〖选项〗中将“系统表”勾上。
将所选工作簿的各个工作表及工作表中的字段名添加到查询结果中,全选可直接将工作表名添加,
〖下一步〗〖下一步〗,选择“在MS query中继续编辑查询”;
4、 弹出MS Query查询编辑,点击【显示/隐藏条件】图标,在“条件字段”中添加“店铺”,
值改为“[店]”(方括号中内容随意),再添加个条件为“颜色”,值改为“[色]”,点击【将数据返回Excel】
5、 回到excel的“导入数据”对话框,点击〖参数〗,选中“店”字段,再选择“从下列单元格中获取数据”,
选择一个用来更改查询关键字的单元格(如B1),并勾选“单元格值更改时自动刷新”,
“色”字段改成从单元格“B2”中获取,〖确定〗。数据放置位置选择“A3”。〖确定〗。
6、 当更改B1和B2单元格的内容(做个数据有效性)时,A3及以下的数据会即时刷新。
此法对于需要经常在局域网中查询数据非常方便,比如:数据放在局域网内的一台主机上,通过MS Query即可不打开工作簿查询数据。
select date(t) as day
generate_series('2020-10-27'::date,'2020-11-03', '1 days') as t;
下面是执行效果,跨年跨月的情况也是没问题的:
public class Hello {
String dateFormat = "yyyy-MM-dd";
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
public static void main(St...
一、 简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT nickname,email FROM testtable WHERE name=张三 (一) 选择列表
A.name as table_name, --表名
B.name as column_name, --列名
C.value as column_description --列名备注
from sys.tables A
inner join sys.columns B on B.object_id = A.object_id
left join sy...
固定日期减一个月(日、年) dateadd(表达式1,表达式2,表达式3) 表达式1为MM或YY或DD 表达式2为1 表达式3为要减的日期 一个月的第一天 第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进