oracle 多行多列变成一列多行
作者&投稿:芒齿 (若有异议请与网页底部的电邮联系)
如果这样的话,就用row_number()over(partition
by
id),进行排序,然后把排序后的再进行转换。
比如上面这个就是
select
row_number()over(partition
by
id)
id_id,id,countnum
from
table
这样会出来结果,如下
id_id
id
countnum
1
10001
30
2
10001
40
3
10001
50
1
10002
20
2
10002
50
3
10002
30
上面的结果没有排序,也可以按照countnum进行排序,就是在partition
by
id的后面加一个orderby,看你用不用了。
然后再对这个结果进行行列转换,用case
when就行,我假设上张表取别名为a
那么
select
id,(case
when
id_id=1
then
countnum
end)
column1,,(case
when
id_id=2
then
countnum
end)
column2,(case
when
id_id=3
then
countnum
end)
column3,(case
when
id_id=4
then
countnum
end)
column3,........from
a
不过这种写法有一个问题,就是必须写一个最长的,不然你就有数据不能显示出来。
如果只有一个10001,那么可以利用rownum直接编组。
关甄舒普: SELECT NAME||','||STREET||','||SUBURB||',shh'||POST FROM TEMP_TABLE T;
霞浦县13928748458: oracle 如何实现一行多列转换成一列多行 - ?
关甄舒普: 使用union合并查询结果,前提是他们是类似的数据类型.详细语法参考http://www.w3school.com.cn/sql/sql_union.asp
霞浦县13928748458: oracle怎样将多列转换成一行? - ?
关甄舒普: 用 WM_CONCAT() 函数
霞浦县13928748458: oracle怎么把多个列(字段)合并成一列.把下面的日期合并在一起 - ?
关甄舒普: 是不是要把三个date放一列,三个ru放一列,一共组合成两列: select date_a, ru_a from table union all select date_b, ru_b from tableunion all select date_c, ru_c from table
霞浦县13928748458: oracle单行多列,拆分成多行 - ?
关甄舒普: select 1001, regexp_substr('1,2,3','[^,]+',1,rownum), regexp_substr('7,8,9','[^,]+',1,rownum) from dual connect by rownum <=lenght(substr_replace('1,2,3','[^,]+'))+1 上面是一句sql 有一个缺点,就是B,C的项目个数要是不一样的话,要做一些变形. 例子中是用 逗号 分隔.
霞浦县13928748458: Oracle中多行合并为一列,具体内容请看问题补充,谢谢 - ?
关甄舒普: select name,case when course='语文' then course end course1,case when course='语文' then score end score1,case when course='数学' then course end course2,case when course='数学' then score end score2,case when course='英语' then course end course3,case when course='英语' then score end score3 from mytable group by name
霞浦县13928748458: Oracle:多列转多行 - ?
关甄舒普: 你这个应该是一张通用的表吧,就是说下面还有可能出现,诸如id=10002或者10003等. 如果这样的话,就用row_number()over(partition by id),进行排序,然后把排序后的再进行转换. 比如上面这个就是 select row_number()over(partition by id...
霞浦县13928748458: 在Oracle中,如何将多行数据合并成一行数据,如下: - ?
关甄舒普: 如果这两行有个共同的其他列作为分组,标志他们是同一组、比如姓名编号之类的,是可以group by后min出来的. select 姓名,min(引流管) as 引流管,min(化疗) as 化疗, min(放疗) as 放疗 from 记录表 group by 姓名 ;
霞浦县13928748458: Oracle 多行如何转换为1行??
关甄舒普: 估计要写过程才能实现CREATE OR REPLACE PROCEDURE sp_test ISi int :=0j ints nvarchar2beginselect count(username) into i from user;while i<j loopselect username || ' ' into s from user;j=j+1;end loop;select s from dual;end;
霞浦县13928748458: {ORACLE}请教大家怎么把多行合并成一行?? - ?
关甄舒普: select a.PUSH_CODE,a.PROVINCEPUDATE,a.provinceRECEIVERNAME,b.CITYPUDATE,b.CITYRECEIVERNAME from table1 a, table2 b where a.PUSH_CODE=b.PUSH_CODE