/*--原帖地址:
http://community.csdn.net/Expert/topic/3826/3826130.xml?temp=.4175836
--*/
--示例数据
--建企业名称表
CREATE TABLE qiye (qiyemingcheng char(16),xingzhi char(4),shunxu int)
insert into qiye select '企业甲','国有',1
union all select '企业乙','国有',2
union all select '企业丙','国有',3
union all select '企业丁','民营',4
union all select '企业戊','民营',5
--建指标名称表
CREATE TABLE zbmc (zhibiaoming char(20),shunxu int,flag int)
insert into zbmc select '总产值',1,1
union all select '总利润',2,1
union all select '万元产值能耗',3,-1
union all select '人均收入',4,1
union all select '万元损耗',5,-1
--建具体指标资料表企业名称、指标名称、年份、月份、当月指标数值
CREATE TABLE zhibiao (qyname char(10),zbname char(16),nian int,yue int,zhibiaozhi float)
insert into zhibiao
select '企业甲','总产值',2004,2,88888.99
union all select '企业甲','总利润',2004,2,666.66
union all select '企业甲','万元产值能耗',2004,2,2222.22
union all select '企业甲','人均收入',2004,2,2008.18
union all select '企业甲','万元损耗',2004,2,200.96
union all select '企业甲','总产值',2005,1,98888.99
union all select '企业甲','总利润',2005,1,866.66
union all select '企业甲','万元产值能耗',2005,1,2022.11
union all select '企业甲','人均收入',2005,1,2208.87
union all select '企业甲','万元损耗',2005,1,203
union all select '企业甲','总产值',2005,2,99999.99
union all select '企业甲','总利润',2005,2,888.66
union all select '企业甲','万元产值能耗',2005,2,2122.22
union all select '企业甲','人均收入',2005,2,2708.18
union all select '企业甲','万元损耗',2005,2,200.96
union all select '企业乙','总产值',2004,2,78888.99
union all select '企业乙','总利润',2004,2,666.66
union all select '企业乙','万元产值能耗',2004,2,2222.22
union all select '企业乙','人均收入',2004,2,2008.18
union all select '企业乙','万元损耗',2004,2,200.96
union all select '企业乙','总产值',2005,1,79888.99
union all select '企业乙','总利润',2005,1,876.66
union all select '企业乙','万元产值能耗',2005,1,2022.11
union all select '企业乙','人均收入',2005,1,2208.87
union all select '企业乙','万元损耗',2005,1,203
union all select '企业乙','总产值',2005,2,96999.99
union all select '企业乙','总利润',2005,2,868.66
union all select '企业乙','万元产值能耗',2005,2,2122.22
union all select '企业乙','人均收入',2005,2,2608.18
union all select '企业乙','万元损耗',2005,2,200.96
union all select '企业丙','总产值',2004,2,58888.99
union all select '企业丙','总利润',2004,2,666.66
union all select '企业丙','万元产值能耗',2004,2,2222.22
union all select '企业丙','人均收入',2004,2,2008.18
union all select '企业丙','万元损耗',2004,2,200.96
union all select '企业丙','总产值',2005,1,68888.99
union all select '企业丙','总利润',2005,1,966.66
union all select '企业丙','万元产值能耗',2005,1,2022.11
union all select '企业丙','人均收入',2005,1,2208.87
union all select '企业丙','万元损耗',2005,1,203
union all select '企业丙','总产值',2005,2,99999.99
union all select '企业丙','总利润',2005,2,888.66
union all select '企业丙','万元产值能耗',2005,2,2122.22
union all select '企业丙','人均收入',2005,2,2708.18
union all select '企业丙','万元损耗',2005,2,100.96
union all select '企业丁','总产值',2004,2,84888.99
union all select '企业丁','总利润',2004,2,646.66
union all select '企业丁','万元产值能耗',2004,2,2222.22
union all select '企业丁','人均收入',2004,2,2008.18
union all select '企业丁','万元损耗',2004,2,200.96
union all select '企业丁','总产值',2005,1,94888.99
union all select '企业丁','总利润',2005,1,856.66
union all select '企业丁','万元产值能耗',2005,1,2022.11
union all select '企业丁','人均收入',2005,1,2208.87
union all select '企业丁','万元损耗',2005,1,203
union all select '企业丁','总产值',2005,2,99999.99
union all select '企业丁','总利润',2005,2,888.66
union all select '企业丁','万元产值能耗',2005,2,2122.22
union all select '企业丁','人均收入',2005,2,2708.18
union all select '企业丁','万元损耗',2005,2,400.96
go
/*--处理要求
现在要统计全省工业企业指标情况,工业企业要分民营企业和国有企业两类,并且在统计出来时要求国有企业在民营企业的前边,要按照指标分类统计当月情况、和上月比较情况、指标提升情况、本年本月止累计、去年本月同期,指标提升情况要求当月指标减去上月指标,然后根据不同的指标情况得出是变好了还是变坏了,因为要求指标和单位都要按照事先规定的顺序显示,所以我设计了三个表,一个是企业名称表qiye,里边有企业名称、企业性质(用来区分是国企还是民营)、显示顺序(因为要求按照顺序显示和打印),一个是指标名称表zbmc,暂时里边有指标名、显示顺序,我想加个字段来表示指标提升情况的标记,比如说总产值增大后说明指标上升了,能耗升高后说明指标下降了,但我现在还没想出怎样定义这个字段,所以暂时用了个标记,它的值是1时表示 指标增到后说明指标是提升了,-1时表示该指标值增大后说明该指标下降了,最后一个表是具体指标资料表zhibiao,里边有企业名称、指标名称、年份、月份、当月指标数值
请问怎样用怎样的SQL语句才能得出如下格式的结果:假设是统计今年2月份数据
指标名称 单位名称 指标值 和上月比 指标提升情况 本年1-2月累计 去年同期值
-----------------------------------------
总产值 全省
国营
民营
企业甲
企业乙
企业丙
企业丁
总利润 全省
国营
民营
企业甲
企业乙
企业丙
企业丁
万元产值能耗 全省
国营
民营
企业甲
企业乙
企业丙
企业丁
--*/
--查询的存储过程
create proc p_qry
@year int, --要查询的年份
@month int --要查询的月份
as
set nocount on
declare @y int,@m int,@y1 int
select @y1=@year-1
if @month=1
select @y=@year-1,@m=12
else
select @y=@year,@m=@month-1
select case when a.s2=0 then a.zhibiaoming else '' end as 指标名称
,a.qiyemingcheng as 单位名称
,指标值=cast(a.指标值 as decimal(10,2))
,上月指标值=cast(isnull(b.上期,0) as decimal(10,2))
,和上月比=case
when isnull(b.上期,0)=0 then '0.00%'
else cast(cast(a.指标值*100/b.上期 as decimal(10,2)) as varchar)+'%' end
,指标提升情况=substring('↓-↑',cast(sign(a.指标值-isnull(b.上期,0))*a.flag as int)+2,1)
+cast(abs(cast(a.指标值-isnull(b.上期,0) as decimal(10,2))) as varchar)
,本年累计=cast(a.本年累计 as decimal(10,2))
,去年同期值=cast(isnull(c.同期,0) as decimal(10,2))
from(
--本期
select zb.zhibiaoming
,qiyemingcheng=case
when grouping(qy.xingzhi)=1 then N'全省'
when grouping(qy.qiyemingcheng)=1 then qy.xingzhi
else qy.qiyemingcheng end
,指标值=sum(case when c.yue=@month then zhibiaozhi end)
,本年累计=sum(zhibiaozhi)
,flag=max(zb.flag)
,s1=min(zb.shunxu),s2=1-grouping(qy.xingzhi)
,s3=1-grouping(qy.qiyemingcheng),s4=min(qy.shunxu)
from zbmc zb,qiye qy,zhibiao c
where c.nian=@year and c.yue<=@month
and c.qyname=qy.qiyemingcheng
and c.zbname=zb.zhibiaoming
group by zb.zhibiaoming
,qy.xingzhi,qy.qiyemingcheng
with rollup
having grouping(zb.zhibiaoming)=0
)a left join(
--上期
select zb.zhibiaoming
,qiyemingcheng=case
when grouping(qy.xingzhi)=1 then N'全省'
when grouping(qy.qiyemingcheng)=1 then qy.xingzhi
else qy.qiyemingcheng end
,上期=sum(zhibiaozhi)
,s1=min(zb.shunxu),s2=1-grouping(qy.xingzhi)
,s3=1-grouping(qy.qiyemingcheng),s4=min(qy.shunxu)
from zbmc zb,qiye qy,zhibiao c
where c.nian=@y and c.yue=@m
and c.qyname=qy.qiyemingcheng
and c.zbname=zb.zhibiaoming
group by zb.zhibiaoming
,qy.xingzhi,qy.qiyemingcheng
with rollup
having grouping(zb.zhibiaoming)=0
)b on a.zhibiaoming=b.zhibiaoming and a.qiyemingcheng=b.qiyemingcheng
left join(
--同期
select zb.zhibiaoming
,qiyemingcheng=case
when grouping(qy.xingzhi)=1 then N'全省'
when grouping(qy.qiyemingcheng)=1 then qy.xingzhi
else qy.qiyemingcheng end
,同期=sum(zhibiaozhi)
,s1=min(zb.shunxu),s2=1-grouping(qy.xingzhi)
,s3=1-grouping(qy.qiyemingcheng),s4=min(qy.shunxu)
from zbmc zb,qiye qy,zhibiao c
where c.nian=@y1 and c.yue=@month
and c.qyname=qy.qiyemingcheng
and c.zbname=zb.zhibiaoming
group by zb.zhibiaoming
,qy.xingzhi,qy.qiyemingcheng
with rollup
having grouping(zb.zhibiaoming)=0
)c on a.zhibiaoming=c.zhibiaoming and a.qiyemingcheng=c.qiyemingcheng
order by a.s1,a.s2,a.s3,a.s4
go
--调用
exec p_qry 2005,2
go
--删除测试
drop table qiye,zbmc,zhibiao
drop proc p_qry
/*测试结果自己看*/
分享到:
相关推荐
本篇文章将深入探讨在ASP.NET中使用的报表统计控件及其重要性。 报表统计控件是ASP.NET应用中的核心组件,它们用于生成、展示和交互式操作各种类型的报表,如柱状图、饼图、折线图、表格等。这些控件能够帮助开发者...
asp.net使用DotNetCharting控件生成报表统计图
HTML5报表统计静态页面是一种基于Web的可视化工具,它利用HTML5的新特性和技术来创建交互式的、数据丰富的图表和报告。HTML5是超文本标记语言的第五个版本,其核心优势在于增强了网页的多媒体支持、离线存储、设备...
**jFreeChart报表统计**是基于Java平台的一款强大的图表生成库,它允许开发者创建各种复杂的统计图表,以直观地展示企业信息。jFreeChart库在IT行业中被广泛应用于数据分析、报表制作以及可视化项目中,其丰富的图表...
网站报表统计图是数据分析的重要工具,它能够直观地展示数据,帮助用户理解并解析大量信息。本技术文档将深入探讨如何开发这样的图表,以便在网站上实现高效的数据可视化。 一、报表统计图的基础概念 报表统计图是...
在本项目中,我们主要探讨如何使用MyBatis与ECharts这两个工具来创建报表统计实例。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而ECharts则是一个基于JavaScript的数据可视化库,提供...
在这个"易语言报表统计曲线图应用例程"中,我们将深入探讨如何利用易语言来实现数据的报表统计与曲线图展示。 报表统计是数据分析中的关键步骤,它涉及到数据的收集、整理和分析。在易语言中,我们可以利用内置的...
本文将深入探讨如何在Delphi项目中运用Excel进行报表统计。 首先,为了在Delphi程序中操作Excel,你需要引入一个名为`ComObj`的单元,这个单元允许我们创建和控制COM对象,如Microsoft Office的应用程序。通过这个...
ASP.NET地图展示及报表统计源码 更新内容: 1、增加了报表中的柱状图统计 2、增加了报表中的折线图统计 一、源码特点 地图展示及报表统计源码,工程地图定位等 二、菜单功能 1、用户登录(MD5加密) 2、添加...
Flex报表统计是一个基于Adobe Flex技术的统计分析工具,它提供了丰富的图表和3D效果,用于展示和理解各种数据。在Flex中,报表和图表是数据可视化的重要组成部分,可以帮助用户直观地理解复杂的数据集。以下是对Flex...
FusionCharts2D、3D报表统计源码 功能介绍: 1、本示例是基于fusioncharts进行二次开发。包含二次开发的word(相关参数配置)已上传。 2、本程序包含柱状图、饼图、折线图以及map地图销售统计。所有的数据自己动态...
易语言报表统计是一种基于易语言编程环境开发的报表统计解决方案,它主要针对的是对数据进行高效、便捷的处理和展示。易语言是中国本土的一种可视化编程工具,以其简单易学的特性,深受初学者和专业开发者喜爱。报表...
标题中的“绿色扁平化后台报表统计bootstrap模板”是一个用于后台管理系统设计的资源,它采用了当前流行的扁平化设计风格,并且以绿色为主色调。这种模板通常包含一系列页面和组件,便于开发人员快速构建具有报表...
基于Microsoft SQL Server存储过程的院内医疗报表统计分析 本文主要介绍了基于Microsoft SQL Server存储过程的院内医疗报表统计分析方法,该方法旨在快速、准确地统计及分析医院医疗业务运行情况,提供Methodology...
汇总计数是报表统计的另一种形式,通常涉及字段数量的计算。举例来说,企业可能需要统计某一产品在市场上的占有率,这时就需要利用报表功能来统计该产品数量。为了实现这一点,开发者需要在报表中创建相应的字段,并...
应用程序报表统计和邮件报表统计则分别分析了应用使用和邮件发送接收的细节,便于管理软件使用和通信行为。 相比之下,Ping32同样具备强大的报表功能,但其侧重点有所不同。Ping32的报表中心专注于终端电脑的各项...
【BOSS系统报表统计速度优化】是中国移动贵州公司业务支撑系统部系统优化QC小组在2012年6月提出并执行的一项品质管理项目。该项目针对BOSS(Business Operation Support System,业务运营支撑系统)系统在报表统计...
### 服务呼叫中心报表统计知识点解析 #### 一、概览 服务呼叫中心报表统计是通过对呼叫中心的各种数据进行收集、整理与分析的过程,旨在帮助管理人员了解呼叫中心的运营状况,提升服务质量,优化资源配置。此类报表...
Excel报表上报&统计系统能够将电子表格软件MS Excel和大型数据库管理系统MS SQL Server 2000/2005/2008集成为一个网络报表平台。在这个平台上,用户可以充分利用MS Excel软件,通过本系统,实现Excel报表的收集及...