这种情况SQL语句应该怎么写啊??????????????????

[复制链接]
查看11 | 回复9 | 2011-11-1 16:20:28 | 显示全部楼层 |阅读模式
表MR_COSTS 结构:
购物卷编号PT_IDC(10)
费用分类FE_TYPE C(4)
费用COSTS N(10,2)
费用分类:家电=A、器具=B、衣服=C、其他=D
但是近期由于一基础表出错导致表MR_COSTS出现以下数据:
PT_ID
FE_TYPE
COSTS
0001
家电
4600
0001
器具
160
0001
衣服
80
0001
B
60
........................
758245
家电
586
758245
衣服
248
758245
A
3876
我想写个SQL语句,让FE_TYPE列出现的字母对应的数值自动合计到对应的列中。比如0001购物卷中,出现了B的费用分类,正常应该是中文字,B对应器具,那么0001购物卷中器具总金额应该是160+60=220,并且SQL语句自动删除B这个非法字符,那么购物卷0001的数值应该是这样:
0001
家电
4600
0001
器具
220
0001
衣服
80

请问这样的SQL语句应该怎么写啊????请各位赐教
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
可以这样得到正确的数据:
select PT_ID,deode(FE_TYPE,'A','家电','n','器具','C','衣服','D','其他',FE_TYPE) ,sum(COSTS)
from MR_COSTS
group by PT_ID,deode(FE_TYPE,'A','家电','n','器具','C','衣服','D','其他',FE_TYPE) ;
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
是DCODE吧???????????????????????
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
这样只是显示的结果,能不能把它直接在表中更新一下
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
sorry,笔误,呵呵,是decode
作一个中间表就可以了:)
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
呵呵,我也写错了,谢谢,受益非浅啊!!!
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
select PT_ID,deode(FE_TYPE,'A','家电','B','器具','C','衣服','D','其他',FE_TYPE) ,sum(COSTS)
from MR_COSTS
group by PT_ID,deode(FE_TYPE,'A','家电','B','器具','C','衣服','D','其他',FE_TYPE) ;

经过测试,将N换成B结果就正确了,呵呵
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
不用如此复杂吧?先UPDATE 一下,因为从你的记录看,正常就应该是"器具"而非"B",所以,先UPDATE不就什么都结了?????
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
最初由 zhxx_ora 发布
[B]不用如此复杂吧?先UPDATE 一下,因为从你的记录看,正常就应该是"器具"而非"B",所以,先UPDATE不就什么都结了????? [/B]

0001 家电 4600
0001 [B]器具[/B]160
0001 衣服 80
0001 [B]器具[/B]60
你的意思是先UPDATE成以上的数据????这样违反了唯一性约束,不能出现2个器具名字。还是你有别的方法???????????
回复

使用道具 举报

千问 | 2011-11-1 16:20:28 | 显示全部楼层
写个PL/SQL吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行