Oracle 表格行列转换,高手请进

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 表格行列转换,高手请进相关的知识,希望对你有一定的参考价值。

表格LS_SDSFB7_JE是按列存储的,需要进行行列转换
-- Create table
create table LS_SDSFB7_JE
(
pzxh VARCHAR2(32) not null,
je NUMBER(16,2) not null,
sbbxm_dm VARCHAR2(20),
sbbl NUMBER(2)
)
有下面两种实现方式,想问下,那种效率更高一些
select A.pzxh, A.je QCZZJE, B.je QCJSJC, C.je QMZZJE, D.je QMJSJC, E.je QMJSJC,
from LS_SDSFB7_JE A,
LS_SDSFB7_JE B,
LS_SDSFB7_JE C,
LS_SDSFB7_JE D,
LS_SDSFB7_JE E
where A.Pzxh = B.Pzxh
and A.Pzxh = C.Pzxh
and A.Pzxh = D.Pzxh
and A.Pzxh = E.Pzxh
and A.Sbbxm_Dm = B.Sbbxm_Dm
and A.Sbbxm_Dm = C.Sbbxm_Dm
and A.Sbbxm_Dm = D.Sbbxm_Dm
and A.Sbbxm_Dm = E.Sbbxm_Dm
and A.SBBL = '1'
and B.Sbbl = '2'
and C.Sbbl = '3'
and D.Sbbl = '4'
and E.Sbbl = '5'

select pzxh,
sum(decode(sbbl, 1, je, 0)) QCZZJE,
sum(decode(sbbl, 2, je, 0)) QCJSJC,
sum(decode(sbbl, 3, je, 0)) QMZZJE,
sum(decode(sbbl, 4, je, 0)) QMJSJC,
sum(decode(sbbl, 5, je, 0)) NSTZE from LS_SDSFB7_JE
group by pzxh

参考技术A 第二种效率高,首先筛选条件少,二不做汇总时数据量也明显比第一种的少,三不用自连接追问

有人说第二种要用sum,sum比连接慢,是这样的吗

追答

汗 ,在sum(decode(sbbl, 1, je, 0)) 中,起始只有一条数据不为0,其余全为0,

用max(decode(sbbl, 1, je, 0)) 也一样的

本回答被提问者和网友采纳
参考技术B 第一种效率偏低,要做连接,建议用第二种。追问

有人说第二种要用sum,sum比连接慢,是这样的吗

追答

SUM需要做一次加法,连接需要分配磁盘空间,你觉得内存快还是磁盘快呢?

参考技术C 提醒一下,两个sql的可能结果是不一样的。最好结合你的数据试验一下。追问

有人说第二种要用sum,sum比连接慢,是这样的吗

追答

具体要看数据量有多少以及索引情况,个人认为大多数情况下跨表会比较慢一点。个人意见。

Excel高手请进!谢谢!!如何解除两表之间的公式关联?

表一A、B两列分别为全校学生的学号和银行卡号。表二A列为部分学生的学号,B列是通过公式VLOOKUP从表一搜到的对应学生银行卡号。我想把表一删除,但因为存在公式关联表二B列就会出现错误。请问如何才能解除这种关系,删除表一的同时,表二的B列仍能显示对应学生的银行卡号。谢谢!!

  一、解除方法:
  先把源文件工作表(带有公式)选定,再点击该表最上角的全选按钮,并右键----点击复制,然后粘贴到新文件的空白工作表里,选择性粘贴,数值,确定。

  二、EXCEL的使用技巧:
  1、右键单击窗口下面的工作表标签,如“Sheet1”.在弹出的菜单中选择“选定全部工作表”
  2、如何快速删除单元格信息, 有一排数据,想快速删除这组数据,可以使用“填充删除法”。选中该列空白单元格,将鼠标移至该单元格右下方,鼠标变成黑色十字后,向上拖动填充。整组数列填充空白完成,等于删除了整组数列。
  3、excel对每个单元格都有默认的命名方式,即字母+数字,如A7,表示第一列的第七排单元格。如果想按照我们自己的想法去重新命名一个单元格,如,将B7改为“我的单元格”,则首先点击该单元格,,选中左上角的名字,修改为“我的单元格”
  4、想快速查看一列或者排的和,可以单击这拍最后一个有数字的单元格,网上拖动全部选择,excel会自动显示选择的这列的。
  5、单元格内的数据有批注,格式,内容等等,但是只想要单纯的数字,不需要其他东西时,可以选中该单元格,点编辑——清除,可以选择清除格式,内容,批注,或者全部东西都删除。
  6、选中不相邻的单元格,可以先按住ctrl,再进行点击选择。
参考技术A 全选B表数据。复制,右键,选择性粘贴,数值,确定。
可以删除表一了本回答被提问者采纳
参考技术B 复制表B的B列数据,然后右击之,选择性粘贴-数值
这样,可以把公式去除
参考技术C A B
1 姓名 品名
2 李四 苹果
3 李四 香蕉
4 刘二 苹果
5 李四 梨子
6 刘二 梨子
7 王五 香蕉
8 刘二 苹果
9 王五 苹果
10张三 梨子

C D E F
1 空格 苹果 香蕉 梨子
2 李四
3 刘二
4 王五
5 张三

D2=SUMPRODUCT(($A$1:$A$10=$C2)*($B$1:$B$10=D$1))

以上是关于Oracle 表格行列转换,高手请进的主要内容,如果未能解决你的问题,请参考以下文章

Pandas行列转换的4大技巧

EXCEL中如何行列转换?

Oracle 行列转换总结

高分求代码 用js或jquery实现表格行列转换,表格含合并的单元格

[高分悬赏] sql 行列转换 请高人指点

oracle 行列转换