没有人遇到过这种情况吗?忘了说还有一个条件:
A B FLAG
---------------------------------------------
1 AAA1 1
1 BBB1 2
2 AAA2 1
2 BBB2 2
如果用SELECT .. FROM a X,a Y WHERE ... 感觉选择的速度相当慢,有没有效率高一点的方法?
A B FLAG
---------------------------------------------
1 AAA1 1
1 BBB1 2
2 AAA2 1
2 BBB2 2
如果用SELECT .. FROM a X,a Y WHERE ... 感觉选择的速度相当慢,有没有效率高一点的方法?
解决方案 »
- em 控制台启动不了
- oracle system用户导入问题 在线等
- SQL语句中怎么格式化字段内容? 某个数字字段,我要把它格式化成3位,不足的部分补零。
- sysdba的问题
- Oracle数据文件问题
- ★★★★★超高难度问题,解决了的给300分,一次虽然只能给100,但我可以给三次的。★★★★★
- oracle8i内容如何导入到8.05里面
- 有关数据处理问题。
- 有可能在一条SQL语句中解决吗!!
- 为什么我的SQL Developer无法建立连接
- utl_file.fseek(fid,absolte,relitive)怎么定位到文件第一行
- 数据库设计过程中 建模 是否是绝对必要的?那个产品最好用!
---------- ---- ----------
1 AAA1 1
1 BBB1 2
2 AAA2 1
2 BBB2 2SQL> select A,max(b) B,max(C) C from
2 (select aa.a,decode(aa.flag,1,b,'') B,decode(aa.flag,2,b,'') C from aa)
3 group by a
4 / A B C
---------- ---- ----
1 AAA1 BBB1
2 AAA2 BBB2
但是感觉 select x.a,x.b ,y.b as c
from aa x,aa y
where x.flag= '1' and
y.flag= '2' and
x.a= y.a
要快很多阿。
SQL> select a,max(decode(flag,1,b,'')) B,max(decode(flag,2,b,'')) C from aa
2 group by a
3 / A B C
---------- ---- ----
1 AAA1 BBB1
2 AAA2 BBB2
select x.a,x.b,y.b c
from
(select aa.a,aa.b from aa where flag='1') x,
(select aa.a,aa.b from aa where flag='2') y
where x.a = y.a;
select a,max(decode(flag,1,b,'')) B,max(decode(flag,2,b,'')) C from aa group by a
和楼主自己写的都满好。你最后一种方法有缺陷。如:
A B FALG
- ---- ----
1 AAA1 1
1 BBB1 2
2 AAA2 1
3 BBB3 2
from (
select a,b,dense_rank() over (partition by a order by b) c
from vTable
)
group by a如果无法确定每个组的行数,那么只好用动态sql实现:
declare
cnt number;
vSQL varchar2(5000);
vCol varchar2(100) := ', max(decode(c,:x,b,0)) b:x'
begin
select max(cnt) into cnt
from (
select count(*) cnt
from vTable
);
for i in 1..cnt loop
vSQL := vSQL || replace(vCol,':x',i);
end loop;
vSQl := 'select a' || vSQL || chr(10) || 'from (
select a,b,dense_rank() over (partition by a order by b) c
from vTable)';
--生成的SQL语句就是所要的SQL语句
...
end;
这个选择感觉满清晰的,速度也比以前的快了很多。谢谢了。