表大致是这样的
列:ID, C1, C2, C3, C4,DATA
001 1 0 0 0 xxxx
002 0 0 1 0 xxxx
。。首先会传入一个唯一的ID,找到一行;
这一行一般情况下列A,B,C,D只有一个为1,其余全为零;
我希望通过SQL语句得到的是列的序号。要求一定要通过PL/SQL 或SQL语言实现
最好是在SELECT时就能够被取出来。即:如果ID = 002, 那么C3列的值为1,将返回3。我尝试了一个CASE语句,但是没有取出期望的数据。
CURSOR cur IS
SELECT DATA,
CASE
WHEN C1 = 1 THEN
1
WHEN C2 = 1 THEN
2
WHEN C3 = 1 THEN
3
WHEN C4 = 1 THEN
4
ELSE
0
END AS ROOT
FROM XXXX
WHERE ID = inputID;
大家帮个忙,给出具体的解决方案,100分奉上!
列:ID, C1, C2, C3, C4,DATA
001 1 0 0 0 xxxx
002 0 0 1 0 xxxx
。。首先会传入一个唯一的ID,找到一行;
这一行一般情况下列A,B,C,D只有一个为1,其余全为零;
我希望通过SQL语句得到的是列的序号。要求一定要通过PL/SQL 或SQL语言实现
最好是在SELECT时就能够被取出来。即:如果ID = 002, 那么C3列的值为1,将返回3。我尝试了一个CASE语句,但是没有取出期望的数据。
CURSOR cur IS
SELECT DATA,
CASE
WHEN C1 = 1 THEN
1
WHEN C2 = 1 THEN
2
WHEN C3 = 1 THEN
3
WHEN C4 = 1 THEN
4
ELSE
0
END AS ROOT
FROM XXXX
WHERE ID = inputID;
大家帮个忙,给出具体的解决方案,100分奉上!
select date,decode(C1,1,1,decode(C2,1,2,decode(C3,1,3)),null) as root
from tab;
from xxxx
where id = inputId
这样
from tab
where id = 具体值;
是不是应该调换一下位置?思路很不错,学习
select length(to_number(C4||C3||C2||c1)) FROM table
这样做如果4个字段值都为0应该返回0,这样是返回1了
小弟新学,麻烦稍微解释一下
||是oracle里面的连接
没算法原理的
C4||C3||C2||c1合并成1个字段 比如0001(c1=1),但是这样如果是字符的话,length()=4
所以to_number()变成数字就是1了,再求length()=1
再来C4||C3||C2||c1 1000(c4=1)to_number()变成数字就是1000了 再求length()=4取巧的方法,因为你要的数字正好等于length()
否则的话你要么用case when then else
或者就是前面的decode(字段,条件1,结果1,....最后都不符合的结果)
我在调试SQL的时候,发现总是找不到需要的结果
最后发现是有人在修改我添加的测试行5555
请问诸位前辈
有没有办法让我在生成行数据后直接将该行锁定,在我解锁之前别的客户端不能随意修改这一行呢????
create table TEST_CESHI
as select * from table这样就你知道表名了,就没人改了
统计结束后
drop table TEST_CESHI
就好了