查询使用了三个 ROW_NUMBER() 分别生成行号,两个组内序号
一个简单的例子
反回数据库中用户表的列表
使用 ROW_NUMBER() 生成行号( rowunm ),行号以表名排序
-- 例如:查看用户表
-- 以表名称排序生成行号
SELECT ROW_NUMBER() OVER( ORDER BY name ) as rowunm
,name as ctablename
FROM sysobjects
WHERE xtype = 'U'
order by name
-- 1/8 1411 计件单统计表 返回结果前,生成统计表保存由SQL临时库, 与1400软件逻辑相同
-- 生成一个表计件表
-- 以单价分组
--, gd_js.部门编号,gd_js.部门名称,gd_js.部门全名,gd_js.员工编号,gd_js.姓名
-- gd_jm.日期, gd_jm.日
select ROW_NUMBER() over (partition by gd_jm.年 order by gd_jm.年 ) as 行号
, gd_jm.工资表编号 , gd_jm.年 , gd_jm.年月, gd_jm.月 , gd_jm.季
, gd_js.批号,gm_ph.产品编号
,ROW_NUMBER() over( partition by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季, gd_js.批号
order by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季, gd_js.批号 ) as 产品分组序号
, gm_ph.产品名称,gd_js.工序编号,gm_jml.工序名称
, ROW_NUMBER() over( partition by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季
, gd_js.批号, gm_ph.产品编号, gm_ph.产品名称, gd_js.工序编号, gm_jml.工序名称
order by gd_js.单价 ) as 序号
, sum(gd_js.金额) as 金额, sum(gd_js.数量) as 数量, gd_js.单价 as 单价
-- into tempdb.dbo.temp_cursor_gd_js_sum_5QY0U821V_1
from gd_js inner join gd_jm
on gd_js.计件单主表序号 = gd_jm.计件单主表序号
left join gm_jml
on gd_js.工序编号 = gm_jml.工序编号
left join gm_ph
on gd_js.批号 = gm_ph.批号
where gd_jm.工资表编号 like '2020-01'
and gd_js.部门编号 like '%%'
and gd_js.员工编号 like '%%'
and gd_js.工序编号 in ('101','102','103','104','100','105','106','107')
group by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季
, gd_js.批号, gm_ph.产品编号, gm_ph.产品名称, gd_js.工序编号, gm_jml.工序名称,gd_js.单价
ORDER BY gd_jm.工资表编号,gd_jm.年月
,gd_js.批号,gm_ph.产品名称,gd_js.工序编号,gm_jml.工序名称
--',N'@P1 varchar(7),@P2 varchar(2),@P3 varchar(2)',,,
RANK() 生成序号 如果排列出现重复 会跳号
-- 1/8 1411 计件单统计表 返回结果前,生成统计表保存由SQL临时库, 与1400软件逻辑相同
-- 生成一个表计件表
-- 以单价分组
--, gd_js.部门编号,gd_js.部门名称,gd_js.部门全名,gd_js.员工编号,gd_js.姓名
-- gd_jm.日期, gd_jm.日
select ROW_NUMBER() over (partition by gd_jm.年 order by gd_jm.年 ) as 行号
, gd_jm.工资表编号 , gd_jm.年 , gd_jm.年月, gd_jm.月 , gd_jm.季
, gd_js.批号,gm_ph.产品编号
, RANK() over( order by gm_ph.产品编号 ) as 产品序号
, ROW_NUMBER() over( partition by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季, gd_js.批号
order by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季, gd_js.批号 ) as 产品组内序号
, gm_ph.产品名称,gd_js.工序编号,gm_jml.工序名称
, ROW_NUMBER() over( partition by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季
, gd_js.批号, gm_ph.产品编号, gm_ph.产品名称, gd_js.工序编号, gm_jml.工序名称
order by gd_js.单价 ) as 分组序号
, sum(gd_js.金额) as 金额, sum(gd_js.数量) as 数量, gd_js.单价 as 单价
-- into tempdb.dbo.temp_cursor_gd_js_sum_5QY0U821V_1
from gd_js inner join gd_jm
on gd_js.计件单主表序号 = gd_jm.计件单主表序号
left join gm_jml
on gd_js.工序编号 = gm_jml.工序编号
left join gm_ph
on gd_js.批号 = gm_ph.批号
where gd_jm.工资表编号 like '2020-01'
and gd_js.部门编号 like '%%'
and gd_js.员工编号 like '%%'
and gd_js.工序编号 in ('101','102','103','104','100','105','106','107')
group by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季
, gd_js.批号, gm_ph.产品编号, gm_ph.产品名称, gd_js.工序编号, gm_jml.工序名称,gd_js.单价
ORDER BY 9
-- ORDER BY gd_jm.工资表编号,gd_jm.年月
-- ,gd_js.批号,gm_ph.产品名称,gd_js.工序编号,gm_jml.工序名称
--',N'@P1 varchar(7),@P2 varchar(2),@P3 varchar(2)',,,
DENSE_RANK() 不发生跳号
-- 1/8 1411 计件单统计表 返回结果前,生成统计表保存由SQL临时库, 与1400软件逻辑相同
-- 生成一个表计件表
-- 以单价分组
--, gd_js.部门编号,gd_js.部门名称,gd_js.部门全名,gd_js.员工编号,gd_js.姓名
-- gd_jm.日期, gd_jm.日
select ROW_NUMBER() over (partition by gd_jm.年 order by gd_jm.年 ) as 行号
, gd_jm.工资表编号 , gd_jm.年 , gd_jm.年月, gd_jm.月 , gd_jm.季
, gd_js.批号,gm_ph.产品编号
, DENSE_RANK() over( order by gm_ph.产品编号 ) as 产品序号1
, RANK() over( order by gm_ph.产品编号 ) as 产品序号2
, ROW_NUMBER() over( partition by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季, gd_js.批号
order by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季, gd_js.批号 ) as 产品组内序号
, gm_ph.产品名称,gd_js.工序编号,gm_jml.工序名称
, ROW_NUMBER() over( partition by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季
, gd_js.批号, gm_ph.产品编号, gm_ph.产品名称, gd_js.工序编号, gm_jml.工序名称
order by gd_js.单价 ) as 分组序号
, sum(gd_js.金额) as 金额, sum(gd_js.数量) as 数量, gd_js.单价 as 单价
-- into tempdb.dbo.temp_cursor_gd_js_sum_5QY0U821V_1
from gd_js inner join gd_jm
on gd_js.计件单主表序号 = gd_jm.计件单主表序号
left join gm_jml
on gd_js.工序编号 = gm_jml.工序编号
left join gm_ph
on gd_js.批号 = gm_ph.批号
where gd_jm.工资表编号 like '2020-01'
and gd_js.部门编号 like '%%'
and gd_js.员工编号 like '%%'
and gd_js.工序编号 in ('101','102','103','104','100','105','106','107')
group by gd_jm.工资表编号, gd_jm.年 , gd_jm.年月,gd_jm.月 , gd_jm.季
, gd_js.批号, gm_ph.产品编号, gm_ph.产品名称, gd_js.工序编号, gm_jml.工序名称,gd_js.单价
ORDER BY 9
-- ORDER BY gd_jm.工资表编号,gd_jm.年月
-- ,gd_js.批号,gm_ph.产品名称,gd_js.工序编号,gm_jml.工序名称
--',N'@P1 varchar(7),@P2 varchar(2),@P3 varchar(2)',,,
NTILE()排序 分成多少组进行排序,
NTILE()OVER(ORDER BY COLUMNNAME)
select NTILE(2)over(order by name),* from #Tmp -- 把人员分为两组
select NTILE(3)over(order by name),* from #Tmp -- 把人员分为三组