求教一个比较怪异的SQL查询问题的解决方案!谢谢大家了!
表大致是这样的 
 列: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;
------解决方案--------------------select decode(c1,1,1,0)+decode(c2,1,2,0 )+decode(c3,1,3,0 )+decode(c4,1,4,0 ) 
 from xxxx 
 where id = inputId 
 这样
------解决方案--------------------select date,decode(C1,1,1,decode(C2,1,2,decode(C3,1,3,decode(C4,1,4,0)),0) as root 
 from tab 
 where id = 具体值;
------解决方案--------------------楼上都说了,用DECODE
------解决方案--------------------我倒是有一个疑问,我心里总觉得函数套函数执行起来可能会比较慢一些,但真实情况不是很了解,有没有人高手解答一下,这两种都行的解决方法那种效率快些,谢谢
------解决方案--------------------
select length(to_number(C1||C2||C3||c4)) FROM table   
 另外的思路
------解决方案--------------------select length(to_number(C4||C3||C2||c1)) FROM table 
 是不是应该调换一下位置?思路很不错,学习
------解决方案--------------------还有个问题 
 select length(to_number(C4||C3||C2||c1)) FROM table 
 这样做如果4个字段值都为0应该返回0,这样是返回1了
------解决方案--------------------select nvl(length(decode(to_number(C4||C3||C2||c1),0,null,to_number(C4||C3||C2||c1))),0) FROM table 这样就可以了,呵呵
------解决方案--------------------HelloWorld_001()的思路太棒了,学习
------解决方案--------------------|| 在pl/SQL里面是连接字符串
------解决方案--------------------我那样写的话对数据要求的比较高 
 ||是oracle里面的连接
------解决方案--------------------select length(to_number(C4||C3||C2||c1)) FROM table 
 没算法原理的 
 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