只考虑sql简单高效,暂时不考虑索引等优化。表Table1有80多列,其中有200多万数据,我现在想从中选出n列做统计。分组字段:A,B,C
统计字段:D,E,F,G
求和字段:MIANJI现在我的SQL语句如下:SELECT A,B,C,
(SELECT SUM(MIANJI) FROM Table1 T2 WHERE D='111' AND T2.A=T1.A AND T2.B=T1.B AND T2.C=T1.C),
(SELECT SUM(MIANJI) FROM Table1 T3 WHERE E='112' AND T3.A=T1.A AND T3.B=T1.B AND T3.C=T1.C),
(SELECT SUM(MIANJI) FROM Table1 T4 WHERE F='113' AND T4.A=T1.A AND T4.B=T1.B AND T4.C=T1.C),
(SELECT SUM(MIANJI) FROM Table1 T2 WHERE G='114' AND T5.A=T1.A AND T5.B=T1.B AND T5.C=T1.C),FROM Table1 T1 WHERE A IN('1','2','3') GROUP BY A,B,C ORDER BY A,B,C出来的结果呢也是我需要的,本来Table1的数据量就大,而我现在还用了那么多的"SELECT *** FROM Table1",是否影响效率啊?请问大家有没有更好的SQL语句?多多指教!
统计字段:D,E,F,G
求和字段:MIANJI现在我的SQL语句如下:SELECT A,B,C,
(SELECT SUM(MIANJI) FROM Table1 T2 WHERE D='111' AND T2.A=T1.A AND T2.B=T1.B AND T2.C=T1.C),
(SELECT SUM(MIANJI) FROM Table1 T3 WHERE E='112' AND T3.A=T1.A AND T3.B=T1.B AND T3.C=T1.C),
(SELECT SUM(MIANJI) FROM Table1 T4 WHERE F='113' AND T4.A=T1.A AND T4.B=T1.B AND T4.C=T1.C),
(SELECT SUM(MIANJI) FROM Table1 T2 WHERE G='114' AND T5.A=T1.A AND T5.B=T1.B AND T5.C=T1.C),FROM Table1 T1 WHERE A IN('1','2','3') GROUP BY A,B,C ORDER BY A,B,C出来的结果呢也是我需要的,本来Table1的数据量就大,而我现在还用了那么多的"SELECT *** FROM Table1",是否影响效率啊?请问大家有没有更好的SQL语句?多多指教!
解决方案 »
- 存储过程的返回值问题
- 求一SQL,关于数据混淆.在线等
- rac中如何修改监听的端口号
- 为什么oracle刚连上起始几秒插入速度很快,过一会就慢了
- USERS01.DBF数据文件可能损坏,现在用 recover datafile 'D:\ORACLE\ORADATA\RAINBOW\USERS01.DBF'也不行,请高手指教,急!!!
- 大家帮看一下这个存储过程哪里有错
- 在oracle10g 中国如何改变要登陆的数据库?
- 今天生日,只有自己祝福自己,开个帖子散分~~~~~~~~~
- 请教各位一个SQL语句的写法
- 执行存储过程报错,报对象XXX.proc 无效
- 新手请教 清空数据库语句
- 一道有点难度的oracle面试问题(sql查询语句)
sum(decode(d,'111',mianji,0)),
sum(decode(e,'112',mianji,0)),
sum(decode(f,'113',mianji,0)),
sum(decode(g,'114',mianji,0)),
FROM Table1 T1
WHERE A IN( '1 ', '2 ', '3 ')
GROUP BY A,B,C
ORDER BY A,B,C
这样行不
decode(d,'111',mianji,0)中的条件如果碰到下边这种情况呢:
原来是D='111',现在变为D='111' and D='112',或者他的条件是
D='111' and (D='112' or F='23')???
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)该函数的含义如下:
if ( 条件=值1 )
return(翻译值1)
else if( 条件=值2)
return(翻译值2)
......
else if( 条件=值n )
return(翻译值n)else
return(缺省值)
end if;select decode('2',null,'1',2,(select 5 from dual),'4') from dual ;返回5select decode(null,null,'1',2,(select 5 from dual),'4') from dual ;返回 1注意: 这里的翻译值和缺省值可以使用表达式或子查询,但是不能返回多个值,否则会出现错误.你可以这样写decode(d,'111',mianji,'112',mianji,0)
then mianji
else 0
end)