Java实现交叉表_Sql交叉表简单实现 | 学步园
最近碰到一需求,是酱紫的: 一个销售商品表, 每年每月每天都卖出N种不同种类的商品, 最后要统计每月每种商品的销售额. 或每年的, 在此我模拟创建了一个简单的表, 主要说明经验和大家一块分享, 若发现有问题, 欢迎随时指教.
如下:(此表过于简单, 主要用于说明交叉表)
按某一年的多月查询结果如下:
多年对比查询结果如下:
具体实现代码如下:
----------创建一个交叉表--------------create table salesRecord (
id int primary key identity(1,1) not null,
[date] datetime not null,
[goods] varchar(10) not null,
[money] decimal(10,2) default 0
)
----------向交叉表中插入记录--------------
insert into salesRecord values('2009-3-2','显示器',2300)
insert into salesRecord values('2009-1-3','键盘',30)
insert into salesRecord values('2009-3-2','机箱',200)
insert into salesRecord values('2009-7-2','鼠标',55)
insert into salesRecord values('2009-12-2','硬盘',455)
insert into salesRecord values('2009-9-2','屏保膜',10)
insert into salesRecord values('2009-4-28','硬盘',455)
insert into salesRecord values('2009-2-9','电源线',15)
insert into salesRecord values('2009-3-5','主板',605)
insert into salesRecord values('2009-8-15','摄像头',120)
insert into salesRecord values('2009-5-18','U盘',105)
insert into salesRecord values('2008-5-28','U盘',105)
insert into salesRecord values('2009-10-11','U盘',80)
-------创建访问交叉表的查询语句生成函数---(商品种类赿多,查出出的表字段就赿多)--------------
/*
* @year 某一年
* @ym 有可能是年 有可能是月, 看后边的@flag决定
* @month 某一月
* @flag 对前边参数的说明标记.
* 如果 YY 则某年到某年查询,前两个参数为开始年,结束年,第三个参数无效(但仍然需要传入任意整型值)
* 如果YMM 某一年从几月到几月查询 ,第一个参数为某年, 后两个参数为开始月和结束月.
* @returns 返回组装后的字符串.
*/create function getQueryStr (@y int,@ym int,@m int,@flag varchar(3))
returns varchar(7000)
as
begin
declare @tempStr varchar(20)
declare @rtnStr varchar(7000)
declare @condStr varchar(500)
--判断如果是YY则是查某一年到某一年,组装查询串及条件
if(@flag='YY')
begin
set @rtnStr=' select year(date) as ''年份'', '
set @condStr=' year(date)>= '+cast(@y as varchar) +' and year(date)<= '+cast(@ym as varchar)+' group by year(date)'
end
else if(@flag='YYM')
--否则查某一年的某一月到某一月,组装查询串及条件 begin
set @rtnStr=' select cast(month(date) as varchar)+''月'' as ''月份'', '
set @condStr=' year(date)= '+cast(@y as varchar)+' and month(date)>= '+cast(@ym as varchar)+' and month(date)<= '+cast(@m as varchar)+' group by month(date)'
end
declare getOne cursor
for
select distinct goods from salesRecord
open getOne
fetch next from getOne into @tempStr
while @@fetch_status=0
begin
set @rtnStr = @rtnStr+' sum(case goods when'''+@tempStr+'''then money else 0 end) as'''+@tempStr+''','
fetch next from getOne into @tempStr
end
close getOne
deallocate getOne
set @rtnStr=left(@rtnStr,len(@rtnStr)-1)
set @rtnStr=@rtnStr+' from salesRecord where'+@condStr
return @rtnStr
end
----------按多年查询------------
declare @str varchar(7000)
set @str=dbo.getQueryStr(2008,2009,0,'YY');
exec(@str)
----------按一年多月查询------------
declare @str varchar(7000)
set @str=dbo.getQueryStr(2009,0,12,'YYM');
exec(@str)
----------查询下源表中的数据对比下------------
select * from salesRecord order by date
---------如果不用了可以删除函数和表--------------
drop function getQueryStr
drop table salesRecord
Java实现交叉表_Sql交叉表简单实现 | 学步园相关推荐
- 查询列名在哪张表_SQL—多表查询
文章结构: 表的加法 表的联结 表的联结案例 case表达式 sqlzoo练习题 表的加法[union|并集]:表的加法是指将表的数据按行合并在一起(要求两张表的数据结构一致),是按行进行添加数据. ...
- oracle usenl,深入理解Oracle表(1):ORDERED和USE_NL | 学步园
ORDERED好理解,就是表示根据 from 后面表的顺序join,从左到右,左边的表做驱动表 use_nl(t1,t2):表示对表t1.t2关联时采用嵌套循环连接,其并不能让优化器确定谁是驱动表或谁 ...
- java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园
在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...
- php提交后清楚表单缓存,PHP提交表单后如何控制缓存 | 学步园
在开发过程中,经常会出现表单出错而返回页面的时候填写的信息全部丢失的情况,为了支持页面回跳,可以通过以下两种方法实现. 1.使用header头设置缓存控制头Cache-control. PHP代码 h ...
- java tail -f 后返回_tail -f 的实现 | 学步园
最原始的想法和实现 最容易想到的就是不断的读取一个文件,如果读取到文件结尾(EOF),那么sleep一下然后再次尝试. 事实上Apache Common IO里就有一个这样的实现 这种方法到优点是简单 ...
- java communal_java 打印 类似打印存折的打印。 | 学步园
前段时间由于需要做了个打印,主要是打印学生证. 需求很简单,就是在规定的坐标点打印规定的内容即可. 为了实现,却费尽了周折,不过还好,在大家的帮助下,终于实现了最终想要的功能. 其代码如下: pack ...
- java 实现电子签名_java swing实现手写板电子签名系统 | 学步园
java swing实现手写板电子签名系统 支持 手写板 ,触摸屏电脑,支持压强 压感效果......................... 部分代码 MyLeftPanel.java public ...
- java adt 布局_android布局——AbsoluteLayout(布局)详解 | 学步园
AbsoluteLayout(绝对布局) 前言: 该布局是不会写代码的人专用的,直接在ADT下拉组件到合适位置即可;很坑爹的说! 绝对布局是直接通过X,Y坐标来控制组件在Activity中的位置的 说 ...
- java runnable 匿名_匿名类实现Runnable接口 | 学步园
15.2.3 使用Runnable接口 我们知道,Java中的类只能够是单继承,也就是说,如果一个类为了使用线程而继承了Thread类,它就不能再继承别的类了.这很可能给编程带来不便.本节中介绍的就 ...
最新文章
- java学习笔记(2)
- 统计学习导论 Chapter2--What Is Statistical Learning?
- Pug+Stylus+Bootstrap入门
- python flask项目过程_Python 开发过程遇到的问题
- 解决win7和ubuntu双系统ubuntu不能上网的问题
- 字典、集合与字符串——Python基础语法
- JAVA 实现《超级玛丽》游戏
- android模拟器设置静态ip,安卓模拟器多开挂手游改IP防封号技术讲解
- C语言程序设计答何钦铭答案,c语言程序设计何钦铭课后题答案
- Java 导入导出Excel
- 管理储存组和邮箱数据库
- micro hdmi引脚定义义_臻实力芯定义:京东AMD笔记本电脑双11开门红
- IDEA 集成Statistic插件
- 美国 android手机号码,格式编辑文本为美国电话号码1(xxx)-xxxx你输入android?
- HBase Shell常用命令
- 十四、策略模式——你要黄焖鸡、手撕鸡、大盘鸡、叫花鸡都可以,指定一个吧
- [Western CTF 2018]shrine
- Win10电脑开机进不去系统怎么修复
- 微信小程序实现关注与取消关注功能
- TPM分析笔记(一) TPM历史
热门文章
- 利用JWT安全验证(前后端分离,单点登录,分布式微服务)
- Codeforces Round #670 (Div. 2) C D E
- VS2010 MVC4下载地址
- 简单的《找不同汉字版》,来考考你的眼力吧
- u盘打开提示格式化怎么办?有用的方法来了
- 2020计算机夏令营+预推免统计
- AMA指标代码逐一解释,附源码(python)
- 通过windows自带远程桌面,实现不同局域网的电脑相互访问(默默P2P远程桌面管理工具-直接内网穿透)
- 学人工智能有前途吗?AI发展前景怎么样?
- 中国人民解放军郑州计算机学院官网,解放军信息工程大学录取分数线2021