重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创建表插入数据:
创新互联建站-专业网站定制、快速模板网站建设、高性价比乌尔禾网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式乌尔禾网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖乌尔禾地区。费用合理售后完善,10多年实体公司更值得信赖。
create table test
(id int,
field int);
insert into test values (1,101);
insert into test values (1,102);
insert into test values (1,103);
insert into test values (2,36);
insert into test values (2,37);
insert into test values (2,38);
insert into test values (2,39);
commit;
执行:
select t.id,
max(decode(rn, 1, field, null)) field1,
max(decode(rn, 2, field, null)) field2,
max(decode(rn, 3, field, null)) field3,
max(decode(rn, 4, field, null)) field4,
max(decode(rn, 5, field, null)) field5
from (select test.*, row_number() over(partition by id order by field) rn
from test) t
group by t.id;
结果:
REGEXP_SUBSTR是ORACLE函数 结果已验证
SELECT '1',REGEXP_SUBSTR('a,b', '[^,]+', 1, LEVEL, 'i') AS STR
FROM DUAL
CONNECT BY LEVEL =
LENGTH('a,b') - LENGTH(REGEXP_REPLACE('a,b', ',', ''))+1;
可以用wm_concat函数先把数据变成行显示,然后再通过截取来显示具体的月份,wm_concat转换如下
select compay_name cn, wm_concat(income) ic
from (select compay_name, sum(income) income, substr(time, 1, 6) time
from income
---where time =start_month and time = end_month
group by compay_name, substr(time, 1, 6)
order by compay_name, substr(time, 1, 6))
group by compay_name;
测试表测了下,可以用,你看看,主要是先根据逗号进行分割,然后connect,level等于逗号的数目:
select id,nvl(substr(glbh,instr(glbh,',',1,lvl)+1,instr(glbh,',',1,lvl+1)-instr(glbh,',',1,lvl)-1),'kong') glbh
from (
select id,lvl,','||glbh||',' glbh
from test a ,
(select level lvl from dual connect by level=
(select max(length(glbh)-length(replace(glbh,',')))+1 from test)) b
) t1
where substr(glbh,instr(glbh,',',1,lvl)+1,instr(glbh,',',1,lvl+1)-instr(glbh,',',1,lvl)-1) is not null
order by id,glbh;
行转列的准则就是通过主键进行分组,之后对行其它字段加上sum()、max()、count()函数,里边用decode()这类函数进行处理,总之分组不要用到他就成。
你把屏幕旋转90°,或者你把脑袋横着屏幕也可以。
不仅仅是 Oracle ,就目前人类已经创造的数据库而言,在显示习惯上,不管是屏幕还是纸质,横向显示列(Col),纵向显示行(Row),因为表的数据增减是沿着行(Row)的方向增减,而人们更习惯于纵向快速对比同一列的多行信息,而不善于横向对比同一行的多列信息。
大概可以猜到你希望构建一个数据结果视图,这个视图的列值是指定的某个月的全部日期,如果在最左边再加上几列,比如序号、名次、姓名,最右边再加上一列,比如总业绩,那么就可以用来展示该月全体销售人员的销售额以及排名。如果要实现类似需求,那么就努力构造你的 SQL 语句吧,虽然没有证据证明无法用 SELECT 语句实现,但似乎SELECT 必须制定列名,即使你使用 * 那也代表的是所有列。如果配合程序语言,那么实现起来就很简单。你可以试试存储过程,动态创建表,直接构造你需要的列,然后 SELECT * 即可。
上个世纪出现计算机屏幕的时候,屏幕显示就是纵向滚屏,横向从来没动过,至今人们已经习惯了屏幕纵向滚动,因为大多数语言文字都是横向排版比较适合人们的阅读习惯,纵向阅读确实费劲。如果最初屏幕是横向滚动的,那么现在情况也许就截然不同了。
顺便说一下,阅读横向排版的纸质或电子版的中文书籍,页面较宽而字符较小行距较小的时候,容易找错下一行。阅读英文则很少有此情况,这也许是方块字与长短英文单词的区别?阅读台湾出版的纵向排版的中文书籍,刚开始不习惯,后来觉得确实比横向排版有优势。比如,你单手把书翻卷起来,阅读到接近中缝的文本时,不需要反复以书脊为轴转动书本,阅读很方便。而如果是横排,那么你看到接近中缝的几个字之后,需要转动书本再去找举例中缝最远的下一行,很容易就找错了。也许,如果计算机最初是台湾人发明的,那么现在鼠标中间那个滚轮就应该是横着的,电脑屏幕也是横向滚动,而纵向基本不动了。看看下面这段纵向文字,舒服不?