精华内容
下载资源
问答
  • 主要介绍了Python DataFrame一列拆成多列以及一行拆成多行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • SQL codewith cte as(select '10001' BeginResId, '10005' EndResId, 5 count, 100 price from dualunion allselect '10007', '10012', 6, 200 from dual)select beginresid+level-1 resid,price from cteconnect by...

    SQL codewith cte as(

    select '10001' BeginResId, '10005' EndResId, 5 count, 100 price from dual

    union all

    select '10007', '10012', 6, 200 from dual

    )

    select beginresid+level-1 resid,price from cte

    connect by level<=count and prior price=price and

    prior dbms_random.value is not null;

    结果为:

    RESID PRICE

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

    10001 100

    10002 100

    10003 100

    10004 100

    10005 100

    10007 200

    10008 200

    10009 200

    10010 200

    10011 200

    10012 200

    11 rows selected

    展开全文
  • DROP TABLE TEST PURGE ;CREATE TABLE TEST (po_number VARCHAR2(16),product_name VARCHAR2(64),quantity NUMBER);INSERT INTO TEST VALUES('CJ201300048','TP-LINK网络交换机TP-1024DT ', 2);...

    DROP TABLE TEST PURGE ;

    CREATE TABLE TEST (po_number VARCHAR2(16),product_name VARCHAR2(64),quantity NUMBER);

    INSERT INTO TEST VALUES('CJ201300048','TP-LINK网络交换机TP-1024DT ', 2);

    INSERT INTO TEST VALUES('CJ201300049','汉邦4路/特顿 600线半球/希捷硬盘500G',1);

    INSERT INTO TEST VALUES('CJ201300050','TP LINK无线路由器DAP-1353',2);

    INSERT INTO TEST VALUES('CJ201300060','科密电子门禁MF850D',1);

    commit;

    WITH a AS (SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM <= (SELECT MAX(t.quantity) FROM TEST t))

    SELECT t1.po_number,t1.product_name,1 quantity FROM TEST t1 LEFT JOIN a ON t1.quantity >= a.rn

    SQL> WITH a AS (SELECT ROWNUM rn FROM dual CONNECT BY ROWNUM <= (SELECT MAX(t.quantity) FROM TEST t))

    2 SELECT t1.po_number,t1.product_name,1 quantity FROM TEST t1 LEFT JOIN a ON t1.quantity >= a.rn

    3 ;

    PO_NUMBER PRODUCT_NAME QUANTITY

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

    CJ201300050 TP LINK无线路由器DAP-1353 1

    CJ201300050 TP LINK无线路由器DAP-1353 1

    CJ201300048 TP-LINK网络交换机TP-1024DT 1

    CJ201300048 TP-LINK网络交换机TP-1024DT 1

    CJ201300060 科密电子门禁MF850D 1

    CJ201300049 汉邦4路/特顿 600线半球/希捷硬盘500G 1

    6 rows selected

    SQL>

    展开全文
  • 多行合并成一行(逗号隔开): 原表结构: 合并后的结果: 建表及插入数据: -- 创建测试用表rows_to_row create table rows_to_row( name char(5) not null default '', hobby varchar(20) not null default...

    多行合并成一行(逗号隔开):

    原表结构:

    合并后的结果:

    建表及插入数据:

    -- 创建测试用表rows_to_row
    create table rows_to_row(
    name char(5) not null default '',
    hobby varchar(20) not null default ''
    )
    
    -- 向测试表添加数据
    insert into rows_to_row 
    values
    ('张三','aaa'),
    ('张三','sss'),
    ('张三','ddd'),
    ('李四','ggg'),
    ('李四','kkk'),
    ('李四','jjj');

    实现合并效果的代码:

    select  name ,
            hobby = ( stuff((select ',' + hobby from rows_to_row where name = Test.name for xml path('')), 1, 1, '') )
    from rows_to_row as Test 
    group by name

    在解析前,我们要知道SQL Server中语句的逻辑执行顺序(与MySQL中的执行顺序类似),stuff函数和for xml path的用法:

    执行顺序可以参考:https://blog.csdn.net/johnf_nash/article/details/78887618

    stuff函数用法可以参考:https://blog.csdn.net/hzp666/article/details/82796321

    for xml path的用法可以参考:https://www.cnblogs.com/wangjingblogs/archive/2012/05/16/2504325.html

    解析:

    首先来看主查询,主查询按照name进行分组,随后select从分组结果中依次查询出name值李四和张三,接着将李四和张三依次传入子查询中,我们用‘张三’来替换子查询中的Test.name,然后单独执行替换后的子查询,并查看其执行结果:

    select ','+hobby from rows_to_row where name='张三' for xml path('')
    

    使用stuff函数替换掉上述查询结果中字段值最开始处的逗号:

    select STUFF((select ',' + hobby from rows_to_row where name = '张三' for xml path('')), 1, 1, '')
    

    完整查询代码:

    select name ,
           hobby = ( stuff((select ',' + hobby from rows_to_row where name = Test.name for xml path('')), 1, 1, '') )
    from rows_to_row as Test 
    group by name

    一行拆分成多行:

    原表结构:

    拆分后的结果:

    建表及插入数据:

    --创建测试表:
    create table apply_test(
    id int not null default 0,
    name varchar(20)
    )
    
    -- --向测试表中添加数据
    insert into apply_test
    values
    (1,'a,b,c,d,e'),
    (2,'f,g,h'),
    (3,'i,j'),
    (4,'k'),
    (5,'l');

    实现拆分效果的代码:

    select a.id,b.name from
    (select id,name=cast('<v>'+replace(name,',','</v><v>')+'</v>' as xml)
     from apply_test ) as a
    outer apply (select name=T.C.value('.','varchar(20)') from a.name.nodes('v') 
    as T(C)) as b  --其中T是表别名,C指表T中的列
    

    在解析前,我们要知道cast函数的用法,outer apply的用法,XQuery中value函数和nodes函数的用法:

    cast函数用法可以参考:https://blog.csdn.net/qq_41080850/article/details/100992242

    outer apply用法可以参考:https://blog.csdn.net/qq_41080850/article/details/101207720

    XQuery中value函数和nodes函数的用法可以参考:https://blog.csdn.net/qq_41080850/article/details/101292703

    解析:

    其中,

    --将apply_test中的name列由varchar型转化成xml型
    select id,name=cast('<v>'+replace(name,',','</v><v>')+'</v>' as xml) from apply_test

    查询结果为:

    select name=T.C.value('.','varchar(20)') from a.name.nodes('v') as T(C)

    的作用是将已经转化成xml类型的name列中的值拆分成多个varchar类型的字母。其中,nodes函数负责将name中的每一个xml值都拆分成多个稍短的xml值,nodes('v')中的'v'是路径表达式;value('.','varchar(20)')中的'.'指定拆分点是当前节点'v','varchar(20)'表示把拆分后的多个xml值转化成最大长度为20的varchar型的字符串。

    为便于理解,举一个例子:

    declare @x xml
    
    set @x='<v>a</v><v>b</v><v>c</v><v>d</v><v>e</v>'
    
    --查询一:
    select T.c.query('.') as result1
    FROM @x.nodes('v') T(c)
    
    --查询二:
    select name=T.c.value('.','varchar(20)')
    from @x.nodes('v') T(c)

    查询一结果:

    查询二结果:

    此外,当outer apply后不跟筛选条件时,a outer apply b的结果就是a和b的笛卡尔积。

    所以完整的查询代码为:

    select a.id,b.name from
    (select id,name=cast('<v>'+replace(name,',','</v><v>')+'</v>' as xml) from apply_test ) as a
    outer apply (select name=T.C.value('.','varchar(20)') from a.name.nodes('v') as T(C)) as b 

     

    其他参考:

    https://blog.csdn.net/qq_39774060/article/details/80618094

    https://blog.csdn.net/Wikey_Zhang/article/details/77480118

    展开全文
  • 现在 需要将课程根据分号分割成多行 -- 使用mysql库中的自增序列表 SELECT t.id, t.NAME, substring_index( substring_index( t.curriculums, ';', b.help_topic_id + 1 ), ';',- 1 ) AS ...

    目前有表如下

    现在 需要将课程根据分号分割成多行

    -- 使用mysql库中的自增序列表
    SELECT
    	t.id,
    	t.NAME,
    	substring_index(
    		substring_index(
    			t.curriculums,
    			';',
    		b.help_topic_id + 1 
    	),
    	';',- 1 
    ) AS curriculum 
    FROM
    	test t
    	JOIN mysql.help_topic b ON b.help_topic_id < (
    	length( t.curriculums ) - length( REPLACE ( t.curriculums, ';', '' ) ) + 1 
    )

    运行结果 

     

    不推荐使用此种方式,应该坚持每个数据都是不可分割的原子数据,推荐建立关联表存储 

    展开全文
  • pandas某一列中每一行拆分成多行的方法

    万次阅读 多人点赞 2018-11-29 12:24:11
    在处理数据过程中,常会遇到将条数据拆分多条,比如个人的地址信息中,可能有多条地址,既有家庭地址也有工作地址,还有电话信息等等类似的情况,实际使用数据的时候又需要分开处理,这个时候就需要将这条...
  • 【Python】DataFrame一列拆成多列以及一行拆成多行

    万次阅读 多人点赞 2019-06-05 20:15:44
    在进行数据分析时,我们经常需要把DataFrame的一列拆成多列或者根据某列把一行拆成多行,这篇文章主要讲解这两个目标的实现。 读取数据 将City列转成多列(以‘|’为分隔符) 这里使用匿名函数lambda来讲City...
  • 工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比。 单行拆分 如果表数据只有一行,则可以直接在原表上直接使用connect by+正则的方法,比如: select regexp_substr('444.555.666', '[^...
  • 在处理数据过程中,常会遇到将条数据拆分多条,比如个人的地址信息中,可能有多条地址,既有家庭地址也有工作地址,还有电话信息等等类似的情况,实际使用数据的时候又需要分开处理,这个时候就需要将这条...
  • SELECT substring_index(substring_index( a.rn,',',b.help_topic_id + 1 ),',' ,- 1) AS rn FROM (select '1,2,3,4' as rn) a JOIN mysql.help_topic b ON b.help_topic_id < (length(a.rn) - length( ...
  • oracle数据库一行拆成多行.sql
  • select PID, SUBSTRING(a.KOrderID,number,CHARINDEX(',',a.KOrderID+',',number)-number) as KOrderID from TB a,master..spt_values where number >=1 and number<=len(a.KOrderID) and type='p'...
  • Oracle 一行拆分为多行

    2021-05-01 08:49:49
    SQL>colsingle_elementfora15SQL>SQL>withilvas2(selectstrasorig_str,3‘,‘||str||‘,‘asmod_str,41asstart_pos,5length(str)asend_pos,6...
  • 一、SQL 语句对一行(单元格)数据拆分成多行 有时候我们也许对一行数据拆分成多行的操作 例如: Col1 COl2 --------- ------------ 1 a,b,c 2 d,e 3 f 分成: Col1 COl2 -------- ----- 1 a1 
  • 主要介绍了Python中实现一行拆多行多行并一行的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 示例: SELECT REGEXP_SUBSTR('1,2,3,4,5,6,7,8,9,10', '[^,]+', 1, LEVEL, 'i') AS STR FROM DUAL CONNECT BY LEVEL <=LENGTH('1,2,3,4,5,6,7,8,9,10') - LENGTH(REGEXP_REPLACE('1,2,3,4,5,6,7,8,9,10',',','...
  • https://www.cnblogs.com/luluping/archive/2010/08/27/1809918.html UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 https://www.w3school.com.cn/sql/sql_union.asp
  • pandas一行拆分成多行

    千次阅读 2019-06-26 16:13:38
    (1) 根据某列拆分 效果: 代码: if __name__ == '__main__': import pandas as pd df = pd.DataFrame({'Country': ['China,US', 'Japan,EU', 'UK,Australia', 'Singapore,Netherland'], ...
  • pandas dataframe 将一行按拆分成多行

    千次阅读 2019-06-20 14:20:51
    方法: df=df.drop('cont', axis=1).join(df['cont'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('tag')) 方法二: df=df['cont'].str.split('/', expand=True).stack()...
  • Sql一行拆分转多行

    千次阅读 2019-10-02 08:07:00
    select a.planid,b.mias,0 miaid into [1_cache3] from (select planid,mias=convert(xml,'<root><v>'+replace(mias,',','</v><v>')+'</v></root>') ...
  • 前言相信大家在处理数据过程中,常会遇到将一行数据拆分成多行的需求,比如说一个人的爱好有很多,比如旅游、画画、跳舞、打羽毛球、唱歌;如果要我们计算各种爱好的分布情况,这时就需要把“爱好”字段拆分为多行。...
  • 用pandas处理数据时,我们经常会遇到将一行拆分成多行,或者将一列拆分成多列的方法,今天主要讲第一个问题,第二个问题下次讲。举个例子:我现有的数据如下: 其中TrainData是我需要将它的一行分成多行的数据,...
  • ​ 从右数第二个分隔符的右边全部,再从左数的第个分隔符的左边: substring_index(substring_index(str,’.’,-2),’.’,1); 原始数据 处理结果展示 三种方式,相同的原理 使用MySql库中的...
  • 原始数据 处理结果展示 DDL CREATE TABLE `company` ( `id` int(20) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, `shareholder` varchar(100) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;...
  • Oracle 一行字符串拆分为多行

    千次阅读 2020-12-03 23:23:40
    从此结果可知数据是先生后,然后使用where条件筛选 2. 多条数据拆分 1、方法1 --正确 with z_branch as( select 'BR1001' brid, 'BR1001.BR1002.BR1003' br_level from dual union all select 'BR1002' brid, 'BR...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,139
精华内容 8,055
关键字:

一行拆成多行