SQL 分组 加列 加自编号 自编号限定

说明:

(1)日期以年月形式显示:convert(varchar(7),字段名,120) ,

(2)加一列

(3)自编号:

row_number() over(order by 字段名 desc) as RowID

row_number() over(partition by 字段1 order by 字段2) as RowID

(4)自编号的限制(不可直接在WHERE条件中加)

举例说明:

想要达到的效果:按月统计各工种的前5名(以件数为依据)

初始SQL语句:

select sum(Sum_TrueNum) 件数,PickUser_Name 拣货人,convert(varchar(7),PickTime,120) 时间

from V_OutIn_MainTop

where Brand_ID=66 and ClassReport_Name=‘出库‘ and len(PickUser_Name)>0

and PickTime>=‘2014-9-1‘ and PickTime<‘2014-12-1‘

group by PickUser_Name,convert(varchar(7),PickTime,120)

效果图:

第一步:    加一列

SQL语句:

select 工种=‘拣货‘,sum(Sum_TrueNum) 件数,PickUser_Name 拣货人,convert(varchar(7),PickTime,120) 时间

from V_OutIn_MainTop

where Brand_ID=66 and ClassReport_Name=‘出库‘ and len(PickUser_Name)>0

and PickTime>=‘2014-9-1‘ and PickTime<‘2014-12-1‘

group by PickUser_Name,convert(varchar(7),PickTime,120)

效果图:

第二步:加自编号(按月、按人分组排序)

SQL语句:

select 工种=‘拣货‘,row_number() over(partition by convert(varchar(7),PickTime,120) order by sum(Sum_TrueNum) desc)as RowID,

sum(Sum_TrueNum) 件数,PickUser_Name 拣货人,convert(varchar(7),PickTime,120) 时间

from V_OutIn_MainTop

where Brand_ID=66 and ClassReport_Name=‘出库‘ and len(PickUser_Name)>0

and PickTime>=‘2014-9-1‘ and PickTime<‘2014-12-1‘

group by PickUser_Name,convert(varchar(7),PickTime,120)

效果图:

第三步:自编号限定(只取前几名)

SQL语句:

with rowJianHuo

as

(

select  工种=‘拣货‘,row_number() over(partition by convert(varchar(7),PickTime,120) order by sum(Sum_TrueNum) desc)as RowID,

sum(Sum_TrueNum) 件数,PickUser_Name 拣货人,convert(varchar(7),PickTime,120) 时间

from V_OutIn_MainTop

where Brand_ID=66 and ClassReport_Name=‘出库‘ and len(PickUser_Name)>0

and PickTime>=‘2014-9-1‘ and PickTime<‘2014-12-1‘

group by PickUser_Name,convert(varchar(7),PickTime,120)

)

select * from rowJianHuo
where RowID<6

也可以这样写:

select * from

(

select  工种=‘拣货‘,row_number() over(partition by convert(varchar(7),PickTime,120) order by sum(Sum_TrueNum) desc)as RowID,

sum(Sum_TrueNum) 件数,PickUser_Name 拣货人,convert(varchar(7),PickTime,120) 时间

from V_OutIn_MainTop

where Brand_ID=66 and ClassReport_Name=‘出库‘ and len(PickUser_Name)>0

and PickTime>=‘2014-9-1‘ and PickTime<‘2014-12-1‘

group by PickUser_Name,convert(varchar(7),PickTime,120)

)a

where RowID<6

效果图:(数据有点少,所以数据没有变化)

备注:

两个表,结构相同,连成一张表:用

select * from 表1

union all

select * from 表2

时间: 2024-10-09 23:41:56

SQL 分组 加列 加自编号 自编号限定的相关文章

SQL分组查询GroupBy加having

一.分组查询 概述作用: “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 1.使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:〉被分组的列〉为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数group by的使用在这只写几个例子吧:例:select courseID,a

SQL分组多列统计(GROUP BY后按条件分列统计) -转

今天在园子里看到个group by 分组多列统计的例子,转走给大家分享一下: create table tests (year datetime year to year,type char(1),value int);alter table tests alter colomn year int; insert into tests values (2015,1,100);insert into tests values (2015,2,200);insert into tests value

SQL分组多列统计(GROUP BY后按条件分列统计)

最近遇到一个问题,需要对一张表做统计,这个统计有什么特别之处值得我记录了下来呢?大家知道SQL中聚合函数GROUP BY的结果一般为一列,即多个值通过聚合函数运算统计到一起,但是如何将不同条件的值统计到不同列中呢,即按条件统计到多个列中.举个栗子: YEAR TYPE VALUE 2015 1 100 2015 2 200 2016 1 150 2016 2 300 2016 3 100 转为: YEAR TYPE1 TYPE2 TYPE3 2015 100 200 0 2016 150 300

SQL给查询结果加序号

情境:在用delphi7编程时,想要给查询出的结果一个编号,比如有一万条结果,就自动从1编号到10000 显示数据时用的是DBGrid控件,但是它的第一列无法很好的显示编号,找了很多方法都不能如愿 后又选用stringgrid,自己在第一列显示序号,效果达到了,但是却没有DBGrid速度快. 最后采用了显示依然使用DBGrid,在查询后给查询结果编号的方法来实现. 方法:1.DBGrid新增加一个field,field名字为ID,这个字段在你的表中是不存在的. 2.SQL.Add('SELECT

SQL Server 日期的加减函数: DATEDIFF DATEADD

SQL Server 日期的加减函数: DATEDIFF    DATEADD DATEDIFF: 返回跨两个指定日期的日期边界数和时间边界数, 语法:DATEDIFF ( datepart , startdate , enddate ) 用 enddate 减去 startdate    注:datepart 指定应在日期的哪一部分计算差额的参数,其日期相减时,只关注边界值,例SELECT DATEDIFF(YEAR,'2008-12-31','2009-1-1') 返回 1      DAT

SQL 行转列

---1.最简单的行转列/* 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 李四 74   84   94张三 74   83   93*/--测试用 IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO create table tb(姓名 varchar(10) , 课程 varchar(

sql 行专列 列转行 普通行列转换

转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华 时间:2008-03-09 地点:广东深圳 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法.  问题:假设有张学生成绩表(tb)如

sql 分组后 组内排名

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号. 示例: xlh           row_num 1700              1 1500              2 1085             

05. 取SQL分组中的某几行数据

原文:05. 取SQL分组中的某几行数据 对表中数据分组,有时只需要某列的聚合值:有时却需要返回整行数据,常用的方法有:子查询.ROW_NUMBER.APPLY,总体感觉还是ROW_NUMBER比较直观.测试数据: if OBJECT_ID('testGroup') is not null drop table testGroup GO create table testGroup ( ID int identity primary key, UserID int, OrderID int )