Oracle中分组后拼接分组字符串
- 格式:docx
- 大小:15.09 KB
- 文档页数:4
group_concat在oracle的用法-回复group_concat函数是MySQL中常用的聚合函数,用于将多行数据按照指定字段进行拼接,形成一个字符串返回。
在Oracle数据库中,并没有内置的group_concat函数,但我们可以通过一些方法来实现类似的功能。
一种常用的方法是使用LISTAGG函数来代替group_concat。
LISTAGG 是Oracle 11g以后新增的聚合函数,用于将多行数据按照指定字段进行拼接,返回一个字符串。
它的基本语法如下:LISTAGG(column_name, separator) WITHINGROUP(order_by_clause)其中,column_name是要进行拼接的字段名,separator是拼接时的分隔符,order_by_clause是可选的排序条件。
下面我们通过示例来演示如何使用LISTAGG函数来实现类似于group_concat的功能。
假设有一个名为Employees的表,其中包含了员工的信息,我们想要按照部门进行拼接,形成一个以部门为分组的字符串列表。
首先,我们可以使用以下SQL查询来获取部门及对应的员工姓名:SELECT department, nameFROM EmployeesORDER BY department;我们可以看到查询结果如下:department nameHR JohnHR JaneIT JamesIT Kate接下来,我们可以使用LISTAGG函数来实现拼接操作。
假设我们想要以逗号作为分隔符,按照部门进行拼接,我们可以使用以下SQL查询:SELECT department, LISTAGG(name, ',') WITHIN GROUP(ORDER BY department) AS employeesFROM EmployeesGROUP BY department;这将返回一个包含部门及对应员工姓名的结果集,以及一个名为employees的新列,其中包含了以逗号分隔的员工姓名列表。
oracle grouping_id 用法在Oracle数据库中,grouping_id是一个用于分组聚合函数的字段,它通常在分组查询中使用。
grouping_id用于标识每个组中的唯一记录,以便在聚合函数中进行处理。
本文将介绍grouping_id的用法、作用和注意事项。
一、grouping_id的作用grouping_id在Oracle数据库中主要用于分组查询,它为每个组分配一个唯一的标识符。
通过使用grouping_id,可以在查询结果中对每个组进行聚合操作,例如求和、计数、平均值等。
grouping_id有助于将结果集按照特定的分组条件进行组织,方便对数据进行进一步的分析和处理。
在使用grouping_id时,需要将其与分组字段一起使用。
通常,分组字段是一个或多个列,用于指定分组的依据。
grouping_id则用于标识每个分组中的唯一记录。
以下是一个示例查询,展示了如何使用grouping_id:```sqlSELECTcolumn1,column2,...,grouping_id,COUNT(*)FROMtable_nameGROUPBYcolumn1,column2,...,grouping_id;```在上述查询中,column1、column2等是用于分组的字段,grouping_id是用于标识每个分组中的唯一记录的字段。
COUNT(*)是聚合函数,用于计算每个分组中的记录数。
grouping_id的值可以是任何数字或字符串,可以根据实际需求进行定义。
通常,可以根据表的主键或其他唯一标识符来设置grouping_id的值。
这样,每个组都会有一个唯一的grouping_id,便于对结果进行管理和分析。
三、注意事项在使用grouping_id时,需要注意以下几点:1.确保分组字段具有唯一性:分组字段必须具有唯一性,以确保每个组中的记录是唯一的。
如果分组字段不具有唯一性,则可能会导致分组错误或数据混淆。
Oracle中分组后拼接分组字符串先分组,再把分组后的属于某组的多条记录的某字段进行拼接。
实现方式如下:/* --创建表 test*/create table test(NO NUMBER,VALUE VARCHAR2(100),NAME VARCHAR2(100));/* ----插入数据*/insert into testselect * from(select '1','a','测试1' from dual union allselect '1','b','测试2' from dual union allselect '1','c','测试3' from dual union allselect '1','d','测试4' from dual union allselect '2','e','测试5' from dual union allselect '4','f','测试6' from dual union allselect '4','g','测试7' from dual);/*--Sql语句:*/select No,ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value,ltrim(max(sys_connect_by_path(Name, ';')), ';') as Namefrom (select No,Value,Name,rnFirst,lead(rnFirst) over(partition by No order by rnFirst) rnNextfrom (select a.No,a.Value,,row_number() over(order by a.No, a.Value desc) rnFirstfrom Test a) tmpTable1) tmpTable2start with rnNext is nullconnect by rnNext = prior rnFirstgroup by No;/*--检索结果如下:*//*NO VALUE NAME1 a;b;c;d 测试1;测试2;测试3;测试42 e 测试54 f;g 测试6;测试7*//********************************* 分析 *************************************/--简单解释一下那个Sql吧:/*--1、最内层的Sql(即表tmpTable1),按No和Value排序,并列出行号:*/select a.No,a.Value,,row_number() over(order by a.No, a.Value desc) rnFirstfrom Test a;/*该语句结果如下:NO VALUE NAME RNFIRST1 d 测试4 11 c 测试3 21 b 测试2 31 a 测试1 42 e 测试5 54 g 测试7 64 f 测试6 7*//*--2、外层的Sql(即表tmpTable2),根据No分区,取出当前行对应的下一条记录的行号字段:*/select No,Value,Name,rnFirst,lead(rnFirst) over(partition by No order by rnFirst) rnNext/*--lead(rnFirst):取得下一行记录的rnFirst字段--over(partition by No order by rnFirst) 按rnFirst排序,并按No分区,--分区就是如果下一行的No字段与当前行的No字段不相等时,不取下一行记录显示*/ from (select a.No,a.Value,,row_number() over(order by a.No, a.Value desc) rnFirstfrom Test a) tmpTable1;/*--该语句结果如下:NO VALUE NAME RNFIRST RNNEXT1 d 测试4 1 21 c 测试32 31 b 测试23 41 a 测试1 4 NULL2 e 测试5 5 NULL4 g 测试7 6 74 f 测试6 7 NULL*//*--3、最后就是最外层的sys_connect_by_path函数与start递归了*/sys_connect_by_path(Value, ';')start with rnNext is nullconnect by rnNext = prior rnFirst/*--这个大概意思就是从rnNext为null的那条记录开始,递归查找,--如果前一记录的rnFirst字段等于当前记录的rnNext字段,就把2条记录的Value用分号连接起来,--大家可以先试试下面这个没有Max和Group的Sql:*/select No,sys_connect_by_path(Value, ';') as Value,sys_connect_by_path(Name, ';') as Namefrom (select No,Value,Name,rnFirst,lead(rnFirst) over(partition by No order by rnFirst) rnNextfrom (select a.No,a.Value,,row_number() over(order by a.No, a.Value desc) rnFirstfrom Test a) tmpTable1) tmpTable2start with rnNext is nullconnect by rnNext = prior rnFirst/*结果是:NO VALUE NAME1 ;a ;测试11 ;a;b ;测试1;测试21 ;a;b;c ;测试1;测试2;测试31 ;a;b;c;d ;测试1;测试2;测试3;测试42 ;e ;测试54 ;f ;测试64 ;f;g ;测试6;测试7*//*--可以看到,每个No的最后一条记录就是我们要的了--所以在sys_connect_by_path外面套一个Max,再加个Group by No,得到的结果就是行转列的结果了--最后再加一个Ltrim,去掉最前面的那个分号,完成。
sql server 分組后一列字段拼接成字符串方法1. 引言1.1 概述:在SQL Server数据库中,有时我们需要将分组后的一列字段拼接成一个字符串。
这种操作在实际应用中非常常见,例如将某一类别下的所有产品名称以逗号分隔的形式显示出来。
为了实现这个需求,我们可采用多种方法和技术。
1.2 文章结构:本文将介绍两种常用的SQL Server函数和技术来实现分组后一列字段的拼接。
首先,我们会详细讲解COALESCE函数的用法并展示如何在分组查询中使用该函数实现字段拼接。
然后,我们会介绍FOR XML PATH('')技术,并演示如何利用它来进行字段拼接操作。
最后,我们会对这两种方法进行性能比较,并对它们的优缺点和适用场景进行总结和讨论。
1.3 目的:本文旨在帮助读者理解SQL Server中实现分组后一列字段拼接的方法和技术。
读者将学习到如何使用COALESCE函数和FOR XML PATH('')技术来处理此类需求,并能根据具体情况选择最合适的方法。
通过本文的阅读与学习,读者将提升自己在SQL Server数据库开发中的技术水平,并能更加高效地完成相关任务。
2. 分组后一列字段拼接成字符串方法2.1 什么是分组后字段拼接在SQL Server中,当我们进行分组查询时,有时候需要将每个分组内的某一列字段合并为一个字符串。
这种需求经常出现在需要生成报表或者统计数据时,其中需要将某一列的多个值拼接在一起作为汇总信息。
例如,我们有一个订单表,每个订单包含了许多产品编号,现在我们希望按照订单进行分组,并将每个订单内的产品编号拼接成一个字符串。
2.2 常用的SQL Server函数和技术在SQL Server中,有几种常用的函数和技术可以帮助我们实现字段拼接:- COALESCE函数:COALESCE函数可以返回参数列表中第一个非空值。
在分组查询中,我们可以使用COALESCE函数来合并同一组内的字段值。
标题:SQL Server中使用GROUP BY进行字符串拼接的方法一、介绍在SQL Server中,我们经常会遇到需要对数据进行分组并进行字符串拼接的情况。
比如我们需要将某个字段按照相同的某个字段进行分组,并将这个字段的数据进行拼接。
这个时候,我们就需要使用GROUP BY进行字符串拼接了。
二、使用STUFF和FOR XML PATH方法进行字符串拼接在SQL Server中,我们可以使用STUFF和FOR XML PATH方法来进行字符串的拼接。
具体步骤如下:1. 在SELECT语句中使用STUFF和FOR XML PATH方法进行字符串拼接```sqlSELECT column1,STUFF((SELECT ', ' + column2FROM table1 t2WHERE t1.column1 = t2.column1FOR XML PATH('')), 1, 2, '') AS concatenated_column2FROM table1 t1GROUP BY column1;```在这个例子中,我们首先在SELECT语句中使用STUFF和FOR XML PATH方法来对column2进行字符串拼接。
然后使用GROUP BY对column1进行分组。
2. 解释- `STUFF`函数用来替换字符串的子字符串。
它的语法是`STUFF(string_expression, start, length, replacement_characters)`。
在这个例子中,我们将`start`设为1,`length`设为2,`replacement_characters`设为空字符串,表示替换从字符串的第一个字符开始的两个字符为一个空字符串。
- `FOR XML PATH('')`表示将查询结果转换为XML,并且将每一行的数据合并为一个字符串。
Oracle多⾏记录合并连接聚合字符串的⼏种⽅法什么是合并多⾏字符串(连接字符串)呢,例如:SQL> desc test;Name Type Nullable Default Comments------- ------------ -------- ------- --------COUNTRY VARCHAR2(20) YCITY VARCHAR2(20) YSQL> select * from test;COUNTRY CITY-------------------- --------------------中国台北中国⾹港中国上海⽇本东京⽇本⼤阪要求得到如下结果集:------- --------------------中国台北,⾹港,上海⽇本东京,⼤阪实际就是对字符实现⼀个聚合功能,我很奇怪为什么Oracle没有提供官⽅的聚合函数来实现它呢:)下⾯就对⼏种经常提及的解决⽅案进⾏分析(有⼀个评测标准最⾼★★★★★):1.被集合字段范围⼩且固定型灵活性★性能★★★★难度★这种⽅法的原理在于你已经知道CITY字段的值有⼏种,且还不算太多,如果太多这个SQL就会相当的长。
看例⼦:SQL> select t.country,2 MAX(decode(t.city,'台北',t.city||',',NULL)) ||3 MAX(decode(t.city,'⾹港',t.city||',',NULL))||4 MAX(decode(t.city,'上海',t.city||',',NULL))||5 MAX(decode(t.city,'东京',t.city||',',NULL))||6 MAX(decode(t.city,'⼤阪',t.city||',',NULL))7 from test t GROUP BY t.country8 /COUNTRY MAX(DECODE(T.CITY,'台北',T.CIT-------------------- ------------------------------中国台北,⾹港,上海,⽇本东京,⼤阪,⼤家⼀看,估计就明⽩了(如果不明⽩,好好补习MAX DECODE和分组)。
Oracle数据库连接字符串(经典大全)2009-08-21 14:36ODBC新版本Driver={Microsoft ODBC for Oracle};Server=myServerAddress;Uid=myUsername;Pwd=myPassword;旧版本Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword; OLE DB, OleDbConnection (.NET)标准连接此连接字符串适用了微软的驱动。
Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;受信连接Provider=msdaora;Data Source=MyOracleDB;Persist Security Info=False;Integrated Security=Yes;标准连接由Oracle提供的驱动。
Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;受信连接Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;Oracle.DataAccess.Client.OracleConnectionData Source=TORCL;User Id=myUsername;Password=myPassword;标准安全连接Data Source=TORCL;Integrated Security=SSPI;使用而不使用tnsnames.oraDataSource=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(C ONNECT_DATA=(SERVER=DEDICA TED)(SERVICE_NAME=MyOracleSID)));UserId=myUsername;Password=myPassword;OracleConnection, Oracle Data Provider, , System.Data.OracleClient.OracleConnection标准Data Source=MyOracleDB;Integrated Security=yes;用于8i RC3及以后的版本指定用户名和密码Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;Integrated Security=no;用于8i RC3及以后的版本忽略tnsnames.ora另一种不需要使用DSN的连接方式。
oracle字段合并函数Oracle字段合并函数是一种在Oracle数据库中常用的功能,可以将多个字段的值合并成一个字段的值。
这在数据处理和报表生成中非常有用,可以简化数据操作和提高效率。
下面将介绍几种常用的Oracle字段合并函数及其用法。
1. CONCAT函数CONCAT函数用于将两个或多个字符串值合并成一个字符串值。
其语法为:CONCAT(string1, string2)其中,string1和string2是要合并的字符串值。
例如,如果有两个字段firstname和lastname,想要将它们合并成一个字段fullname,可以使用以下SQL语句:SELECT CONCAT(firstname, ' ', lastname) AS fullnameFROM employees;2. ||运算符Oracle还提供了一个更简洁的方法来合并字段,即使用||运算符。
其语法为:string1 || string2例如,要将字段city和country合并成一个字段location,可以使用以下SQL语句:SELECT city || ', ' || country AS locationFROM locations;3. CONCAT_WS函数CONCAT_WS函数用于将多个字符串值合并成一个字符串值,并在它们之间添加指定的分隔符。
其语法为:CONCAT_WS(separator, string1, string2, ...)其中,separator是要添加的分隔符,string1、string2等是要合并的字符串值。
例如,要将字段street、city和zipcode合并成一个字段address,并在它们之间添加逗号和空格作为分隔符,可以使用以下SQL语句:SELECT CONCAT_WS(', ', street, city, zipcode) AS addressFROM addresses;4. LISTAGG函数LISTAGG函数用于将多个值合并成一个以指定分隔符分隔的字符串。
oracle 查询结果字段拼接在进行数据查询的时候,有时候需要将查询结果中的多个字段进行拼接,这个操作在Oracle数据库中非常常见。
在此,我们将详细阐述在Oracle数据库中查询结果字段拼接的步骤。
一、使用“||”符号拼接字符串Oracle数据库中使用“||”符号对字符串进行拼接操作,具体用法如下:SELECT column1 || '' || column2 AS new_column FROMtable_name;其中,column1和column2是要拼接的两个字段名称,new_column是新的字段名称。
二、使用CONCAT函数拼接字符串另一种拼接字符串的方法是使用CONCAT函数,其基本用法如下:SELECT CONCAT(column1, '', column2) AS new_column FROM table_name;其中,column1和column2是要拼接的两个字段名称,new_column是新的字段名称。
三、使用LISTAGG函数拼接字符串如果要将查询结果中的多行数据进行拼接,则可以使用LISTAGG 函数。
该函数可将同一列内的多行数据进行拼接,其基本用法如下:SELECT LISTAGG(column_name, '') WITHIN GROUP (ORDER BY column_name) AS new_column FROM table_name;其中,column_name是要拼接的字段名称,new_column是新的字段名称。
需要注意的是,若字段中存在空值,则需指定空值填充符,如下所示:SELECT LISTAGG(column_name, ' ') WITHIN GROUP (ORDER BY column_name) AS new_column FROM table_name;四、使用CASE语句进行拼接操作有时候,需要根据查询结果对字符串进行动态拼接操作,此时可以使用CASE语句。
oracle客户端服务器字符集连接原理(原创版)目录1.Oracle 客户端服务器字符集连接原理概述2.Oracle 客户端服务器字符集连接原理的具体实现3.Oracle 客户端服务器字符集连接原理的实际应用正文一、Oracle 客户端服务器字符集连接原理概述Oracle 客户端服务器字符集连接原理是指在 Oracle 数据库系统中,客户端与服务器之间进行字符串连接时所采用的原理。
在 Oracle 数据库系统中,字符串连接主要依赖于 Oracle 提供的 CONCAT 函数实现,该函数可以将两个或多个字符串连接成一个新的字符串。
同时,Oracle 数据库系统也支持使用”进行字符串连接。
二、Oracle 客户端服务器字符集连接原理的具体实现1.使用 CONCAT 函数实现字符串连接在 Oracle 数据库中,可以通过 CONCAT 函数完成字符串的连接操作。
CONCAT 函数的命令格式如下:```CONCAT(string1, string2,...)```其中,string1、string2 等表示要连接的字符串。
使用 CONCAT 函数连接字符串时,可以根据需要添加多个字符串参数。
例如,要将两个字符串"Hello"和"World"连接起来,可以使用以下命令:```SELECT CONCAT("Hello", "World") FROM DUAL;```执行结果为:```HelloWorld```2.使用”进行字符串连接在 Oracle 数据库中,也可以使用”进行字符串连接。
这种方法更加简洁,只需将两个字符串用”连接即可。
例如,要将两个字符串"Hello"和"World"连接起来,可以使用以下命令:```SELECT "Hello" || "World" FROM DUAL;```执行结果为:```HelloWorld```三、Oracle 客户端服务器字符集连接原理的实际应用在实际应用中,Oracle 客户端服务器字符集连接原理广泛应用于数据处理和业务逻辑实现。
oracle 拼接语句
Oracle 拼接语句
1、什么是Oracle拼接语句
Oracle拼接语句是指用途拼接多条SQL语句来实现复杂的查询,常常在含有多表关联查询,子查询,分组,排序等复杂查询时使用。
2、Oracle 拼接语句的优点
(1)从维护费用及投入时间上看,拼接语句可以省去很多不必要的字段和表的维护工作;
(2)从查询效率上看,拼接语句理论上可以提高查询的效率。
3、Oracle 拼接语句的常用方法
(1)UNION ALL: 用于将多个SELECT语句的查询结果合并。
(2)JOIN: 用于将多个SELECT语句中,每个语句对应多个表连接起来。
(3)EXISTS: 用于检测某个子查询是否存在结果集。
(4)UNION: 用于将多个SELECT语句的查询结果合并,与UNION ALL不同的是,UNION会去除重复的记录。
- 1 -。
mysql和oracle的字符拼接⽅法不同的数据库,相应的字符串拼接⽅式不同,通过对⽐加深⼀下记忆。
⼀、MySQL字符串拼接
1、CONCAT函数
语法格式:CONCAT(char c1, char c2, ..., char cn) ,其中char代表字符串,定长与不定长均可以
1.1)连接两个字符串
1.2)连接多个字符串
2、"+"操作符
2.1)连接两个字符串
2.2)连接多个字符串
3、假如其中⼀个字段为NULL,则⽤结果⽤空格代替NULL。
⼆、Oracle字符串拼接
1、CONCAT函数
语法格式:CONCAT(char c1, char c2) ,其中char代表字符串,定长与不定长均可以
1.1)连接两个字符串
1.2)连接多个字符串
使⽤CONCAT函数的嵌套实现。
2、"||"操作符
1.1)连接两个字符串
1.2)连接多个字符串
3、假如其中⼀个字段为NULL,则⽤结果⽤空格代替NULL。
Oracle中分组后拼接分组字符串
先分组,再把分组后的属于某组的多条记录的某字段进行拼接。
实现方式如下:
/* --创建表 test*/
create table test
(
NO NUMBER,
VALUE VARCHAR2(100),
NAME VARCHAR2(100)
);
/* ----插入数据*/
insert into test
select * from
(
select '1','a','测试1' from dual union all
select '1','b','测试2' from dual union all
select '1','c','测试3' from dual union all
select '1','d','测试4' from dual union all
select '2','e','测试5' from dual union all
select '4','f','测试6' from dual union all
select '4','g','测试7' from dual
);
/*--Sql语句:*/
select No,
ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value,
ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name
from (select No,
Value,
Name,
rnFirst,
lead(rnFirst) over(partition by No order by rnFirst) rnNext
from (select a.No,
a.Value,
,
row_number() over(order by a.No, a.Value desc) rnFirst
from Test a) tmpTable1) tmpTable2
start with rnNext is null
connect by rnNext = prior rnFirst
group by No;
/*--检索结果如下:*/
/*
NO VALUE NAME
1 a;b;c;d 测试1;测试2;测试3;测试4
2 e 测试5
4 f;g 测试6;测试7
*/
/********************************* 分
析 *************************************/
--简单解释一下那个Sql吧:
/*--1、最内层的Sql(即表tmpTable1),按No和Value排序,并列出行号:*/
select a.No,
a.Value,
,
row_number() over(order by a.No, a.Value desc) rnFirst
from Test a;
/*
该语句结果如下:
NO VALUE NAME RNFIRST
1 d 测试4 1
1 c 测试3 2
1 b 测试
2 3
1 a 测试1 4
2 e 测试5 5
4 g 测试7 6
4 f 测试6 7
*/
/*--2、外层的Sql(即表tmpTable2),根据No分区,取出当前行对应的下一条记录的行号字段:*/
select No,
Value,
Name,
rnFirst,
lead(rnFirst) over(partition by No order by rnFirst) rnNext
/*--lead(rnFirst):取得下一行记录的rnFirst字段
--over(partition by No order by rnFirst) 按rnFirst排序,并按No分区,
--分区就是如果下一行的No字段与当前行的No字段不相等时,不取下一行记录显示*/ from (select a.No,
a.Value,
,
row_number() over(order by a.No, a.Value desc) rnFirst
from Test a) tmpTable1;
/*
--该语句结果如下:
NO VALUE NAME RNFIRST RNNEXT
1 d 测试4 1 2
1 c 测试3
2 3
1 b 测试
2
3 4
1 a 测试1 4 NULL
2 e 测试5 5 NULL
4 g 测试7 6 7
4 f 测试6 7 NULL
*/
/*--3、最后就是最外层的sys_connect_by_path函数与start递归了*/
sys_connect_by_path(Value, ';')
start with rnNext is null
connect by rnNext = prior rnFirst
/*
--这个大概意思就是从rnNext为null的那条记录开始,递归查找,
--如果前一记录的rnFirst字段等于当前记录的rnNext字段,就把2条记录的Value用分号连接起来,
--大家可以先试试下面这个没有Max和Group的Sql:
*/
select No,
sys_connect_by_path(Value, ';') as Value,
sys_connect_by_path(Name, ';') as Name
from (select No,
Value,
Name,
rnFirst,
lead(rnFirst) over(partition by No order by rnFirst) rnNext
from (select a.No,
a.Value,
,
row_number() over(order by a.No, a.Value desc) rnFirst
from Test a) tmpTable1) tmpTable2
start with rnNext is null
connect by rnNext = prior rnFirst
/*
结果是:
NO VALUE NAME
1 ;a ;测试1
1 ;a;b ;测试1;测试2
1 ;a;b;c ;测试1;测试2;测试3
1 ;a;b;c;d ;测试1;测试2;测试3;测试4
2 ;e ;测试5
4 ;f ;测试6
4 ;f;g ;测试6;测试7
*/
/*
--可以看到,每个No的最后一条记录就是我们要的了
--所以在sys_connect_by_path外面套一个Max,再加个Group by No,得到的结果就是行转列的结果了
--最后再加一个Ltrim,去掉最前面的那个分号,完成。
*/。