`
mircle
  • 浏览: 22843 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为分组查询添加一列按分组字段从1开始计数的序号列

阅读更多


*************************************************************************************************
// date   2008-1-24
// auth   mircle

//  qq     83529101

//msn     mircle_wang@hotmail.com
// class  oracle
**************************************************************************************************
(部门--人员 一对多 一个部门可以有多个员工,同一个部门内员工不重名)
employee 表

部门人员
Atom
Ajohn
Amary
  
Blongman
Bsolong
  
Ctomy
Clincon



----------------------------------------------------------------------- -----------------------
增加一列序号 :要求 序号要按部门不同 从1开始计数
要得到的结果如下
-------------------------------------------------------------------------------------------------

部门人员序号
Ajohn1
Amary2
Atom3
   
Blongman1
Bsolong2
   
Clincon1
Ctomy2


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

 oracle sql:
select 部门,人员,(select sum(1) from employee emA
                             where  emA.部门=emB.部门
                              and    emA.人员<=emB.人员) as 序号
from employee emB
order by emB.部门,emB.人员 
 



这个sql智慧的地方是在:

 

计算小于它的有多少条记录来计算它的序号
---------------------------------------------------------------------------------------------------

 

分享到:
评论
6 楼 mircle 2008-09-12  
当然   上面的sql还可以演变成如下

create  table  stu (id  varchar(2),
                     name  varchar(5));


insert  into stu('1' ,'hello');
insert  into stu('3','john');
insert  into stu('4',tom);


select  *  from  stu  如下

ID NAME
1 hello
3 john
4 tom

因为使用自增长ID , 所以,有时删除后 就会出现断号的问题
那我们怎么才能得到连续的号码呢   通过把上面的sql演变可以得到答案

select  id,name,(select  sum(1)  from  stu  emA  
                 where  ema.id<=emB.Id
                 )  as  序号

from stu emB
order by emB.id,emB.name


ID NAME 序号
1 hello 1
3 john 2
4 tom 3


希望能够对 到我博客的人有所帮助:)




5 楼 让胡路车站 2008-03-10  
1.rank() over()
  序号会出现跳号。如1,2,2,4,5
2.dense_rank() over()
  序号不会出现跳号。如1,2,2,3,4
3.row_number() over()
  不会出现相同顺序号。如1,2,3,4,5
4 楼 mircle 2008-02-18  
引用
yerba 20 天前
使用现有的oracle函数才体现你的智慧,sorry,请原谅我说的话。你那句sql你在大数据量上执行一下就知道了,很快就会游标超出最大值。
告诉你最简单的方式:
select T.*, rank()over(partition by DEPT order by NAME desc)
from employee t

没关系的 ! 我写出来只是想提供一个我知道的方法,你告诉了我一个更好的方法
我还不知道怎么感谢你呢  :)  

3 楼 mircle 2008-02-18  
引用
yerba 20 天前
使用现有的oracle函数才体现你的智慧,sorry,请原谅我说的话。你那句sql你在大数据量上执行一下就知道了,很快就会游标超出最大值。
告诉你最简单的方式:
select T.*, rank()over(partition by DEPT order by NAME desc)
from employee t

没关系的 ! 我写出来只是想提供一个我知道的方法,你告诉了我一个更好的方法
我还不知道怎么感谢你呢  :)  

2 楼 yerba 2008-01-29  
使用现有的oracle函数才体现你的智慧,sorry,请原谅我说的话。你那句sql你在大数据量上执行一下就知道了,很快就会游标超出最大值。
告诉你最简单的方式:
select T.*, rank()over(partition by DEPT order by NAME desc)
from employee t
1 楼 LucasLee 2008-01-24  
巧了,我正好刚用了类似的方式计算序号。
不过我用的不是sum(1),我用的是count(*),会不会更直观点?

相关推荐

    birt分组小计和自动增加序列号实现方法

    4. 如果需要从1开始计数,可以使用 `(rowNumber+1)+$V{GROUP_COUNT}`,这会考虑分组的上下文,确保每个分组内部的序列号重新从1开始。 5. 保存并运行报表,序列号将会自动生成并显示在指定位置。 理解了这两个概念...

    GridView控件如何显示序号

    在这个模板列的部分使用数据绑定表达式(Container.DataItemIndex+1).ToString()%&gt;来绑定序号,其中Container.DataItemIndex属性表示当前数据项在集合中的索引,加1是因为一般序号从1开始计数而不是从0开始。...

    2021-2022计算机二级等级考试试题及答案No.18788.docx

    10. Word 表格操作:在Word中,当插入点位于表格最后一个单元格时,按下Tab键通常会将光标移动到下一个单元格,而不是新增一列。如果需要新增列,需使用相应的菜单或快捷键。 11. 计算机网络定义:计算机网络是一个...

    oracle rownum 的使用 和sqlserver有区别的!

    - 在 Oracle 中,ROWNUM 默认从 1 开始计数,对于每一行返回一个唯一的行号。 - ROWNUM 的值是在数据检索的过程中动态生成的,这意味着它并不依赖于表中的任何字段。 2. **基础查询:** - 直接使用 ROWNUM 进行...

    GridView 序列号递增.doc

    通过使用模板字段和`aspLabel`控件,我们可以轻松地在每一行前添加一个递增的序列号。这种方法不仅简单实用,而且能够确保数据的整洁性和易读性。对于需要频繁展示大量数据的Web应用程序来说,这是一种非常有用的...

    Excel新增工具集

    例如,当前工作表或当前工作簿中的若干工作表中A列有张三、李四、王五、李四,有相同列字段“送货”,则本命令把A列中的两个李四行合并成一行,同时将每个人在所有表中列字段为“送货”的数量相加。 6、比较两表...

    OFFICE2010使用技巧宝典Excel篇

    在“选项”中选择“将数据分组”,根据需要对行或列字段进行分组。 4. **分页显示**:数据透视表的“数据透视表选项”允许用户设置报表筛选页,这样可以按需查看不同的数据子集,提高数据浏览效率。 5. **数据分析...

    精通SQL--结构化查询语言详解

    第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 1.2 数据库系统的结构、组成及工作流程 3 1.2.1 数据库的体系结构 3 1.2.2 数据库系统的组成 4 1.2.3 ...

    Oracle分析函数

    - **用途**:常用于为结果集添加序号。 #### 四、统计分析函数 ##### 1. STDDEV / STDDEV_POP / STDDEV_SAMP - **定义**:计算标准偏差。 - **用途**:适用于需要衡量数据波动程度的场景。 ##### 2. VAR_POP / ...

    2021-2022计算机二级等级考试试题及答案No.4507.docx

    这个SQL语句将按学号分组统计学生数量,如果有重复学号,则会出现多于一条的计数结果,因此D选项正确。 6. 硬件定义:“硬件是计算机系统中物理装置的总称”。这是正确的,硬件包括CPU、内存、硬盘、显示器等。 7....

    延长集团数据采集操作培训.pptx

    - 子集中的记录序号:每个子集内的记录需按连续递增的规则编号,"记录序号"为必填项,"0"表示最新记录。 5. **数据格式要求**: - 日期格式:统一为"YYYY-MM-DD"的文本格式。 - 引用参照项:必须从指定的参考...

    2009计算机考研真题

    但是这里需要注意,由于题目中提到a11的地址为1,意味着从1开始计数,所以实际地址为41 - 8 = 33。 **4. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树...

    2021-2022计算机二级等级考试试题及答案No.2583.docx

    `ListIndex`属性返回或设置当前选中项的索引位置(从0开始计数)。如果没有任何项目被选中,则该属性值为-1。 #### 4. C++ 数制表示 - **知识点**:C++源程序中不能直接表示二进制数。 - **解析**:在C++语言中,...

    谁说菜鸟不会数据分析(一).pdf

    数据表需要满足一定的要求,例如序号要求、第一行是表的列标题、第二行起是数据部分、数据表中不能有合并单元格存在等。 2.1.4 问卷录入:问卷录入有多种方式,例如数值题、单选题、多选题等。数值题一般要求被调查...

    sql2008 hql语句翻译过来的分页语句介绍

    接着,外部的`SELECT`语句从`query`这个CTE中选取所有列,同时应用`ROW_NUMBER()`的范围限制,以获取第6至第10条记录(因为`ROW_NUMBER()`从1开始计数)。这样就实现了分页功能,而无需多次扫描基础表,提高了查询...

    MySQL中distinct和count(*)的使用方法比较

    `GROUP_CONCAT`函数在MySQL 4.1及以上版本可用,而`GROUP BY`则可以直接按指定列进行分组去重,如`SELECT id, type FROM tablename GROUP BY id;` 5. **结合`COUNT()`使用**:`SELECT id, type, COUNT(DISTINCT id)...

    2019VF程序设计考试.docx

    - 在Visual FoxPro中,内存变量是在程序运行期间动态创建的变量,而字段变量则是表中的列。如果当前表文件中含有字段 `NAME` 并且系统中也有一个内存变量 `NAME`,那么命令 `?NAME` 将会显示字段变量 `NAME` 的值,...

    Excel问题集合

    #### 一、如何在一列列出工作簿中的所有表(表名无规律) 在Excel中,若想列出当前工作簿中的所有工作表名称,可以通过编写宏代码来实现。具体步骤如下: 1. **启用开发工具**:在Excel的菜单栏中选择“文件”-&gt;...

    2021-2022计算机二级等级考试试题及答案No.39.docx

    这个属性的值从0开始计数。 - **应用场景**: 当需要获取用户在列表框中选择的具体项时,可以通过`ListIndex`属性结合`List`属性来获取对应的项。 #### 20. 因特网的核心技术 - **知识点**: 因特网采用的核心技术。 ...

    软件编程缩写字典

    1. 编程缩写字典序号描述(Addition - Array) * Addition(Add):表示加法运算 * Address(Addr):表示地址 * Action(Act):表示动作 * Analog Input(AI):表示模拟输入 * Anolog I/O(AIO):表示模拟输入/...

Global site tag (gtag.js) - Google Analytics