已知一表三个字段分别是名字、价格、类别,创建如下:
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报表
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是因为你的'进'没有匹配上,估计可能是带有空格了.