`
逆风的香1314
  • 浏览: 1429764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据汇总加排序

阅读更多

原帖地址:
http://community.csdn.net/Expert/topic/3317/3317231.xml?temp=.7252313

程序选择了: 项目名称,项目年度,地市,申请单位,支持金额这几个字段
其中汇总字段为项目年度,地市
查询结果列就要按需要项目名称,项目年度,地市,申请单位,支持金额排列好
并能按指定的字段进行排序处理
要求生成的结果:
=================================================================
序号   项目名称    项目年度    地市            申请单位    支持金额
1      名称1       2004        省直            1公司      100
2      名称2       2004        省直            2公司      100
3                  2004        省直合计                   200
4      名称3       2004        石家庄          3公司      100
5                  2004        石家庄合计                 100
6                  2004合计                               300
7      名称3       2005        石家庄          3公司       100
8                  2005        石家庄合计                  100
9                  2005合计                               100
10      总计                                               400
=================================================================

------------------------------------------------------------------------------------

--假设如下临时表是经过第一次汇总+排序处理得到的(第一次处理不处理小计,总计等)

create table #t(项目名称 varchar(10),项目年度 varchar(10),地市 varchar(10),申请单位 varchar(10),支持金额 int)
insert #t select '名称1','2004','省直'  ,'1公司',400
union all select '名称2','2004','省直'  ,'2公司',300
union all select '名称3','2004','石家庄','3公司',200
union all select '名称3','2005','石家庄','3公司',100
go

--下面是处理
select 项目名称,项目年度,地市,申请单位,支持金额
from( --这是实现汇总的部分(不考虑小计,总计处理部分的汇总)
 select *
  ,s1=0,s2=项目年度,s3=0,s4=地市,s5=0,s6=申请单位,s7=0 --这是排序需要的
 from #t
 union all
 --这是实现汇总的小计,总计部分
 select 项目名称=case
   when grouping(项目年度)=1 then '总计'
   else '' end
  ,项目年度=case
   when grouping(项目年度)=0
    and grouping(地市)=1
   then 项目年度+'合计'
   else '' end
  ,地市=case
   when grouping(项目年度)=0
    and grouping(地市)=0
    and grouping(申请单位)=1
   then 地市+'合计'
   else '' end
  ,申请单位=case
   when grouping(申请单位)=0 then 申请单位+'合计'
   else '' end
  ,支持金额=sum(支持金额)
  ,grouping(项目年度),项目年度 --这里及下面的是排序需要的
  ,grouping(地市),地市
  ,grouping(申请单位),申请单位
  ,grouping(申请单位)+1
 from #t
 group by 项目年度,地市,申请单位 with rollup --这是要生成小计,总计的分组字段
)a
order by s1,s2,s3,s4,s5,s6,s7,支持金额 --s1~s6是防止小计,总计排序错乱需要的,后面的支持金额是其他排序需要的
go

--删除测试的临时表
drop table #t

/*--测试结果

项目名称    项目年度        地市          申请单位        支持金额       
---------- -------------- -------------- -------------- -----------
名称1        2004           省直             1公司          400
                                         1公司合计          400
名称2        2004           省直             2公司          300
                                         2公司合计          300
                          省直合计                          700
名称3        2004           石家庄            3公司         200
                                         3公司合计          200
                          石家庄合计                        200
           2004合计                                         900
名称3        2005           石家庄            3公司          100
                                         3公司合计          100
                          石家庄合计                        100
           2005合计                                         100
总计                                                        1000

(所影响的行数为 14 行)
--*/

--上面是按项目年度,地市,申请单位做小计,总计的
--下面是只按项目年度,地市做小计,总计的,比较一下,更容易看出规律
--下面是处理
select 项目名称,项目年度,地市,申请单位,支持金额
from( --这是实现汇总的部分(不考虑小计,总计处理部分的汇总)
 select *
  ,s1=0,s2=项目年度,s3=0,s4=地市,s5=0 --这是排序需要的
 from #t
 union all
 --这是实现汇总的小计,总计部分
 select 项目名称=case
   when grouping(项目年度)=1 then '总计'
   else '' end
  ,项目年度=case
   when grouping(项目年度)=0
    and grouping(地市)=1
   then 项目年度+'合计'
   else '' end
  ,地市=case
   when grouping(地市)=0
   then 地市+'合计'
   else '' end
  ,''
  ,支持金额=sum(支持金额)
  ,grouping(项目年度),项目年度 --这里及下面的是排序需要的
  ,grouping(地市),地市
  ,grouping(地市)+1
 from #t
 group by 项目年度,地市 with rollup --这是要生成小计,总计的分组字段
)a
order by s1,s2,s3,s4,s5,支持金额 --s1~s6是防止小计,总计排序错乱需要的,后面的支持金额是其他排序需要的

/*--测试结果

项目名称       项目年度      地市         申请单位     支持金额       
---------- -------------- -------------- ---------- -----------
名称2        2004           省直             2公司      300
名称1        2004           省直             1公司      400
                            省直合计                    700
名称3        2004           石家庄            3公司     200
                            石家庄合计                  200
             2004合计                                   900
名称3        2005           石家庄            3公司      100
                            石家庄合计                   100
             2005合计                                   100
总计                                                    1000

(所影响的行数为 10 行)

--*/

分享到:
评论

相关推荐

    数据结构排序汇总

    根据给定的文件信息,我们可以总结出以下几个关键的数据结构与排序算法的知识点: ### 一、数据类型定义 首先,程序定义了一些基本的数据类型和结构体。这些定义为后续的操作提供了必要的基础。 #### 1.1 基本...

    数据结构排序算法汇总包-直接插入排序 折半插入排序 2—路插入排序 表插入排序 希尔排序 起泡排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序链式基数排序

    实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...

    数据结构排序算法代码汇总

    这两种算法都是在计算机科学中广泛使用的高效排序方法,尤其在处理大量数据时表现优秀。 首先,我们来看看快速排序。快速排序是一种基于分治策略的排序算法,由英国计算机科学家C.A.R. Hoare于1960年提出。它的基本...

    排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)

    排序算法汇总(选择排序、直接插入排序、冒泡排序、希尔排序、快速排序、堆排序) 本资源介绍了六种常用的排序算法:选择排序、直接插入排序、冒泡排序、希尔排序、快速排序和堆排序。下面对每种算法进行详细介绍:...

    数据结构各种排序算法汇总

    算法的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。 #### C++代码实现 ```cpp ...

    ListView 数据绑定、数据汇总及自定义排序示例

    1 如何将数据显示到 ListView。 2 如何对 ListView 中的数据进行求和,并显示到 ListView 上。 3 如何对 ListView 进行自定义排序,并且排序后始终保存合计的行在最下方。

    客户端使用JS排序数据列表

    在客户端使用JavaScript(JS)对数据列表进行排序是一种常见的需求,尤其在网页应用中,它能够提高用户体验,因为用户无需等待服务器响应即可看到实时更新的排序结果。在本篇文章中,我们将深入探讨如何利用JQuery库...

    数据结构各种排序方法汇总.docx

    数据结构中的排序方法是计算机科学中的重要概念,用于组织和整理数据,提高数据处理效率。以下是对几种常见的排序算法的详细解释: 1. 直接插入排序 直接插入排序是一种简单直观的排序算法,它的工作原理是通过构建...

    机器学习中大数据对数据的排序

    排序可以帮助我们更好地理解和分析数据,例如,通过排序可以快速找到最大值或最小值,也可以为后续的数据处理步骤提供有序的数据。 ### 二、Hadoop MapReduce #### 1. Hadoop简介 Hadoop是一个开源框架,用于...

    JAVA排序汇总 各种排序

    在Java编程语言中,排序是数据处理中非常基础且重要的操作。本文将全面解析Java中的各种排序算法,帮助你理解并掌握它们的核心概念、实现方式以及适用场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序...

    数据结构中排序汇总,代码已更新

    在计算机科学中,数据结构是组织和存储数据的方式,而排序是数据处理中的一项基本操作。排序是指将一组数据按照特定的顺序排列的过程。本文将对几种常见的排序算法进行总结,并提供相应的代码实现。 首先,冒泡排序...

    python常用排序算法汇总

    该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 ...self.arr存放的是待排序列表,可改成自己的数据

    Excel排序筛选分类汇总和数据透视表PPT课件.pptx

    Excel 排序、筛选、分类汇总和数据透视表的应用技巧 Excel 排序技巧: * 简单排序:升序、降序、空格总是排在最后 * 多关键字排序:可以根据多个字段进行排序 * 自定义排序:可以根据用户定义的顺序进行排序,需要...

    DataTable分类求和,分类汇总,排序

    在处理大量数据时,我们可能需要对数据进行各种操作,例如分类、求和、汇总以及排序。以下是对"DataTable分类求和,分类汇总,排序"这个主题的详细解析。 1. **DataTable的Compute方法**: DataTable的Compute方法...

    各种排序方法汇总(排序 插入排序 冒泡排序 堆排序 ******)

    插入排序是一种简单的排序算法,它的工作方式是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 1. **初始化**:假设数组的第一个元素已经排好序。 2. **遍历数组**:从第二...

    JAVA 排序汇总 数据结构所有排序算法 的java实现

    本篇文章将详细介绍《JAVA 排序汇总 数据结构所有排序算法的Java实现》文件中提到的各种排序算法及其Java实现方式。 #### 二、排序算法分类 文件中提到了五种主要的排序算法分类: 1. **插入排序**:包括直接插入...

    数据排序筛选、分类汇总

    排序是对工作表中的数据进行重新组织安排的一种方式。Excel可以对整个工作表或选定的某个单元格区域进行排序。 在Excel中,可以对一列或多列中的数据按文本、数字以及日期和时间进行排序,还可以按自定义序列(如...

    数据结构-排序算法性能分析

    其中的数据要用随机数产生(如10000个),至少用5组不同的数据做比较,再使用各种算法对其进行排序,记录其排序时间,再汇总比较。 (3) 演示程序以人机对话的形式进行。每次测试完毕显示各种比较指标值的列表,比较...

    排序算法汇总(shell排序 归并排序 选择排序 快速排序 堆排序 冒泡排序 插入排序)

    这里我们汇总了七种常见的排序算法:Shell排序、归并排序、选择排序、快速排序、堆排序、冒泡排序和插入排序。每种算法都有其独特的特点和适用场景,下面将逐一详细介绍。 1. **Shell排序**:由Donald Shell提出,...

Global site tag (gtag.js) - Google Analytics