怎么根据一条记录中某个字段的值,将此记录分成多条显示?

我有两个表:T_ALARM和T_RESPONSESTATUS

T_ALARM中有一条记录有一个字段STATE,这个字段中存放的是对应T_RESPONSESTATUS表中的RESPONSESTATUSID的多个以逗号分隔的值,如:5,7,8,152,25,32,33,60,现在我要将T_ALARM中的此条记录,显示成如下形式:

HISTORY_ID RESPONSESTATUSID RESPONSESTATUS

626371138 152 关键点内两次点火
626371138 5 劫警
626371138 7 申请信息服务
626371138 8 遥控报警
626371138 25 车门已上锁
626371138 32 车辆撤防
626371138 33 车辆发动
626371138 60 空车

其中HISTORY_ID是T_ALARM表中的,RESPONSESTATUSID RESPONSESTATUS是T_RESPONSESTATUS表中的。

 

responsestatusid 是number类型
t.state是字符串型字段,值如:7,25,32,33,60  当然是s.responsestatusid 可能的值啦!

如果语句写为:
select t.*,s.responsestatus from t_alarm t,t_responsestatus s where s.responsestatusid
in (7,25,32,33,60) and s.isalarm=1

而写为:
select t.*,s.responsestatus from t_alarm t,t_responsestatus s where s.responsestatusid
in (t.state) and s.isalarm=1

是有问题的.

个人估计,由于t.state是字符串型值,所以可能真正的语句变成了:
select t.*,s.responsestatus from t_alarm t,t_responsestatus s where s.responsestatusid
in ('7,25,32,33,60') and s.isalarm=1
而s.responsestatusid是数字型值,所以出"ORA-01722错误".

 

正确的写法:

SELECT T.HISTORY_ID,S.RESPONSESTATUSID,S.RESPONSESTATUS --T.UNIT_ID,T.LON,T.LAT,T.COURSE,T.SPEED,
  FROM T_ALARM T, T_RESPONSESTATUS S
 WHERE INSTR(',' || T.STATE || ',', ',' || S.RESPONSESTATUSID || ',') > 0
   --AND S.ISALARM = 1
   AND T.HISTORY_ID = 626371138

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷月宫主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值