`
hcc20010713
  • 浏览: 41440 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

字符串分组相加 row_number() 纵表转横表

阅读更多

--1.准备工作
create table TEST
(
  id VARCHAR2(10),
  mc VARCHAR2(50)
);

insert into test (ID, MC) values ('2', '11111');

insert into test (ID, MC) values ('2', '22222');

insert into test (ID, MC) values ('3', '22222');

insert into test (ID, MC) values ('3', '11111');

insert into test (ID, MC) values ('3', '33333');

insert into test (ID, MC) values ('1', '11111');

insert into test (ID, MC) values ('1', '22222');

 

--2.
--row_number() over ([partition by col1] order by col2) ) as 别名
--表示根据col1分组,在分组内部根据 col2排序
--而这个“别名”的值就表示每组内部排序后的顺序编号(组内连续的唯一的)


select id, mc,
       row_number() over(partition by id order by mc) rn_by_id,
       row_number() over(order by id) + id rn
from test;

 

with tbl as
(select id, mc,
       row_number() over(partition by id order by mc) rn_by_id,
       row_number() over(order by id) + id rn
from test
)
select id, ltrim(max(sys_connect_by_path(mc,'/')),'/')
from tbl
start with rn_by_id = 1
connect by prior rn = rn -1
group by id
order by id
;


--3.如果id存的不是数字,而是随意的字符串怎么办
with tbl as
(select id, mc,
       row_number() over(partition by id order by mc) rn_by_id,
       row_number() over(order by id) + dense_rank() over(order by id) rn
from test
)
select id, ltrim(max(sys_connect_by_path(mc,'/')),'/')
from tbl
start with rn_by_id = 1
connect by prior rn = rn -1
group by id
order by id
;
--也就是将id替换为dense_rank() over(order by id)

 

 

--4.执行下面sql,助于理解。注意sql1与sql2结果的不同
--sql1
select id, mc,
       row_number() over(partition by id order by mc) rn_by_id,
       row_number() over(order by id) + dense_rank() over(order by id) rn
from test;
--sql2
select id, mc,
       row_number() over(partition by id order by id) rn_by_id,
       row_number() over(order by id) + dense_rank() over(order by id) rn
from test;
--sql3
select id, mc,
       row_number() over(order by id) rn,
       dense_rank() over(order by id) dr,
       rank() over(order by id) rk,
       row_number() over(partition by id order by id) rn_by_id,
       dense_rank() over(partition by id order by id) dr_by_id,
       rank() over(partition by id order by id) rk_by_id,
       row_number() over(partition by id order by mc) rn_by_mc,
       dense_rank() over(partition by id order by mc) dr_by_mc,
       rank() over(partition by id order by mc) rk_by_mc
from test;

 

--5.总结

row_number()涵数则是按照顺序依次使用,相当于我们普通查询里的rownum值;

rank()函数主要用于排序,并给出序号;

dense_rank()功能同rank()一样,区别在于,rank()对于排序并的数据给予相同序号,接下来的数据序号直接跳中跃,dense_rank()则不是,比如数据:
1,2,2,4,5,6      这是rank()的形式 
1,2,2,3,4,5      这是dense_rank()的形式
1,2,3,4,5,6      这是row_number()涵数形式

 

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

补充:还有 MIN (ROWID) OVER (PARTITION BY col)


select id, mc,
       MIN (ROWID) OVER (PARTITION BY id) id0,
       row_number() over(partition by id order by mc) id1,
       row_number() over(order by id) id2,
       dense_rank() over(order by id) id3
from test

 

分享到:
评论

相关推荐

    pig udf 函数(urldecode row_number tomap)

    在这个示例中,`myudfs.jar` 是包含上述 UDF 实现的 jar 文件,`urldecode` 解码 URL 字符串,`ROW_NUMBER` 给每行分配序列号,而 `TOMAP` 将其他字段转换为 Map 类型。 通过理解并正确使用这些自定义 UDF,你可以...

    数据库字符串相加---字符串相加函数

    根据提供的信息,本文将详细介绍一个在SQL Server 2000环境下用于字符串拼接的自定义函数,并对该函数的功能、实现方法以及应用场景进行深入解析。 ### 一、SQL Server 2000简介 SQL Server 2000是微软发布的一款...

    字符串转EnCode_c#

    字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c#

    Oracle中分组后拼接分组字符串.pdf

    Oracle 中分组后拼接分组字符串 本文主要介绍了在 Oracle 中如何对分组后的数据进行拼接操作,生成分组字符串。下面将对这个问题进行详细的分析和解释。 首先,我们需要创建一个测试表,并插入一些测试数据。这个...

    SqlServer2005中使用row_number()在一个查询中删除重复记录的方法

    通常,我们利用`row_number()`进行数据分页,但这里我们将讨论如何利用这个函数来删除表中的重复记录。删除重复记录是一个常见的数据库维护任务,尤其是当数据导入或同步过程中出现了重复数据时。 首先,让我们创建...

    时间字符串转换为time_t精确到秒

    时间字符串转换为time_t精确到秒stringToSeconds。自己编写的。

    character_changed_to_number.rar_字符串转数字

    在这个“character_changed_to_number.rar_字符串转数字”项目中,我们看到的是一个LabVIEW程序,其主要功能就是将输入的字符串转换为相应的数字。 在LabVIEW中,数据类型分为两大类:基本数据类型和复合数据类型。...

    oracle通过sql实现字符串转数字oracle函数

    总结来说,Oracle提供了多种方式来实现字符串到数字的转换,包括`TO_NUMBER()`、`TRY_TO_NUMBER()`以及配合正则表达式的使用。理解并熟练运用这些函数可以帮助我们在处理含有数字的字符串时,更好地进行数据分析和...

    分组字符合并SQL语句 按某字段合并字符串之一(简单合并)

    标题:按某字段合并字符串之一(简单合并) ...即:group by id, 求 value 的和(字符串相加) 1、sql2000中只能用自定义的函数解决 create table tb(id int, value varchar(10)) insert into tb values(1,

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    在LabVIEW编程环境中,二进制字符串转换为十进制数值是常见的操作,尤其是在处理数据或进行计算时。本文将详细讲解如何利用LabVIEW实现这一转换,并探讨相关知识点。 首先,我们要理解二进制和十进制之间的基本概念...

    Oracle中分组后拼接分组字符串[文].pdf

    Oracle 中分组后拼接分组字符串 在 Oracle 中,分组后拼接分组字符串是一种常见的操作,用于将分组后的多条记录的某字段进行拼接。下面我们来详细介绍如何实现这种操作。 首先,创建一个测试表 `test`,该表包含三...

    VS2008 字符串相加源代码

    在这个名为"VS2008 字符串相加源代码"的项目中,我们聚焦于如何在Visual Studio 2008环境下,通过C#语言实现两个字符串的相加操作。这个功能在用户界面中可能表现为两个文本框(TextBox)的输入值合并,适用于例如...

    char.zip_char ** labview_entirecft_labview 字符串_labview 字符串_字符串

    1. **字符串操作**:LabVIEW提供了多种字符串函数,如`String Concatenate`(连接字符串)、`String Split`(分割字符串)、`Find Substring`(查找子字符串)、`Replace Substring`(替换子字符串)等。这些函数...

    mysql 解析json字符串

    mysql解析Json字符串插件 安装方法 1、拷贝lib_mysqludf_json_parsing.dll到mysql目录C:\Program Files\MariaDB 5.5\lib\plugin下 2、在数据库中执行 DROP FUNCTION json_get; CREATE FUNCTION json_get RETURNS ...

    PL/SQL 类型格式转换

    TO_NUMBER(char[,’format_model’]) 字符转换到数字类型 TO_DATE(char[,’format_model’]) 字符转换到日期类型 格式说明符:要与前边要转换的字符串的格式要相同才能转换(匹配问题:格式和位数)。 TO_CHAR...

    C代码实现超长整数字符串 相加,及相应执行程序

    在本文中,我们将深入探讨如何使用C语言实现超长整数字符串的相加操作。超长整数是指那些超过了标准整型(如int、long long)所能表示范围的整数,通常出现在大数运算或者加密算法中。由于C语言本身并不支持这样的...

    VB调用VC写的DLL 实现两个字符串相加成一个字符串

    在本案例中,我们讨论的是如何通过VB调用由VC++编写的DLL(动态链接库)来实现两个字符串的连接,即相加操作。DLL是一种可重用的代码库,它允许多个应用程序共享同一段代码,从而减少内存占用和提高执行效率。 首先...

    字符串转ASCII ASCII转字符串

    总结,字符串转ASCII和ASCII转字符串是编程中常见的操作,主要涉及对字符和其对应的数字表示之间的转换。理解这些概念和实现方式对于理解和处理字符数据至关重要。通过学习不同编程语言中的相关函数和方法,你可以...

    数字字符串转BCD码转字符串C函数

    数字字符串转BCD码,BCD码转字符串C函数,定义好的函数下载即可使用无需更改。

    两个大数相加-字符串实现

    本主题将深入探讨如何通过字符串实现大数相加,这是一种常见的大数处理方法。 一、大数相加的背景与需求 在日常编程中,我们通常使用诸如int、long等基本数据类型来存储和操作数字。然而,当需要处理的数字非常大...

Global site tag (gtag.js) - Google Analytics