已知一表三个字段分别是名字、价格、类别,创建如下:
create table test(
name varchar2(100),price number,type varchar2(100)
);
插入数据:
insert into test values ('土',1000,'进');
insert into test values ('沙',500,'进');
insert into test values ('泥',300,'进');
insert into test values ('泥',100,'出');
insert into test values ('石',200,'出');
commit;
现在我的目的是查询到进的price为正数,出的为负数,我整理的思路和sql如下:
先把'出'的数据乘以-2插入到表中insert into test (select name,price*(-2),'临时' from test where type='出');
commit;
然后直接sum(price)就可以查询出正确结果select name,sum(price) from test group by name;
最后再删除临时数据delete from test where type='3';commit;
好吧没有报表经验,如何只用select来处理呢?sql报表
create table test(
name varchar2(100),price number,type varchar2(100)
);
插入数据:
insert into test values ('土',1000,'进');
insert into test values ('沙',500,'进');
insert into test values ('泥',300,'进');
insert into test values ('泥',100,'出');
insert into test values ('石',200,'出');
commit;
现在我的目的是查询到进的price为正数,出的为负数,我整理的思路和sql如下:
先把'出'的数据乘以-2插入到表中insert into test (select name,price*(-2),'临时' from test where type='出');
commit;
然后直接sum(price)就可以查询出正确结果select name,sum(price) from test group by name;
最后再删除临时数据delete from test where type='3';commit;
好吧没有报表经验,如何只用select来处理呢?sql报表
解决方案 »
- oracle 服务个数
- 请教一句SQL语句
- oracle redo 写条件引起的问题?
- oracle赋值给变量出错!!!! 高手们请进!!!!!!!!
- 关于sql语句的效率问题
- job是不是在数据库一直运行的时候有效,一旦数据库重启,job就要重新run一遍才行
- 这条SQL语句该如何写,请教高手
- Oracle中对2个表作完全连接,就是DB2、SQL server中的full join
- sqlldr可以大量的插入数据(我已经会使用),用sqlldr可不可以作批量的更新数据??
- ERROR 位于第 1 行:ORA-02320: 无法创建嵌套表列ROWINDEX的存储表 ORA-22913: 必须指定嵌套表列或属性的表名称
- sql语句,插入多行
- ibatis 调存储过程查询大数据表
DECODE 或者 CASE WHEN
你好,谢谢你的及时帮助,我刚测试了下,你这样做的结果是进的都是0,出的是负数,结果如下:
土 0 沙 0 泥 -100 石 -200
实际应该是:
土 1000 沙 500 泥 200 石 -200
就是说把进的都搞成0了。是不是逻辑哪里错了?没用过decode,请指教。
你好,谢谢你的及时帮助,我刚测试了下,你这样做的结果是进的都是0,出的是负数,结果如下:
土 0 沙 0 泥 -100 石 -200
实际应该是:
土 1000 沙 500 泥 200 石 -200
就是说把进的都搞成0了。是不是逻辑哪里错了?没用过decode,请指教。
SELECT NAME, SUM(DECODE(TRIM(TYPE), '进', PRICE, '出', (-1) * PRICE, 0)) AS PRICE
FROM TEST
GROUP BY NAME;
我又错了,汗,刚才说的错了。谢谢您啊。结贴了!!感激不尽!!!!
你好,谢谢你的及时帮助,我刚测试了下,你这样做的结果是进的都是0,出的是负数,结果如下:
土 0 沙 0 泥 -100 石 -200
实际应该是:
土 1000 沙 500 泥 200 石 -200
就是说把进的都搞成0了。是不是逻辑哪里错了?没用过decode,请指教。
SELECT NAME, SUM(DECODE(TRIM(TYPE), '进', PRICE, '出', (-1) * PRICE, 0)) AS PRICE
FROM TEST
GROUP BY NAME;
这种做法也是对的!!学习了,我去搜下trim学习下。。
FROM TEST
结果:
土 1000
沙 500
泥 300
泥 -100
石 -200然后在上面的结果集上进行聚合统计:
SELECT NAME, SUM(DECODE(TRIM(TYPE), '进', PRICE, '出', (-1) * PRICE, 0)) AS PRICE
FROM TEST
GROUP BY NAME;土 1000
沙 500
石 -200
泥 200其中,关于DECODE函数:
DECODE(TYPE, '进', PRICE, '出', (-1) * PRICE, 0)如果当前行中的数据,TYPE为'进'的时候,该列为PRICE如果为'出',该列为-1*PRICE,不为出或进,则为0你上面的显示-100,-200是因为你的'进'没有匹配上,估计可能是带有空格了.