取数据的问题
有一张工资表,字段的话大致是(a1,a2,a3,a4.....a10,b1,b2,b3,b4.....b10),还有一张表是对照表(bno,bname)。
A的字段是固定工资项,数值肯定都大于零,这里不需要考虑太多。可是B的字段是不固定的项,B工资有的有,有的为零,每个月都不一样。
现在要做的就是要把B中大于零的项(也就是有工资的项)取出来,如果为零的话不要取出来。然后还要用字段的每次去和对照表关联,取得工资项的中文。最后想要的数据格式就是{(工资1,100),(工资4,50),(工资8,200),(工资10,500)}。不过每个月都不一样,因为最终还是要看工资表里的B字段哪些有工资数据咯。
用SQL语句弄了半天好像也没个思路,不知道各位高手有没有一些思路,或者解决方法,请指教,谢谢。
------最佳解决方案--------------------select
t.bno
,t1.bname
,t.b_value
select decode(rm,1,'b1',2,'b2',3,'b3',4,'b4',5,'b5',6,'b6',7,'b7',8,'b8',9,'b9',10,'b10') bno,
decode(rm,1,b1,2,b2,3,b3,4,b4,5,b5,6,b6,7,b7,8,b8,9,b9,10,b10) b_value from
(select b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b.rm from tb ,(select rownum rm from dual connect by rownum <=10) b ) t
left join tb1 t1
on t.bno =t1.bno
where nvl(t.b_value,0) > 0
------其他解决方案--------------------將表的行轉戌列後,與對照表進行關聯,結果就出來了
------其他解决方案--------------------可能昨晚说的不是很清楚。我后来又考虑了下,其实说就是有一条数据,有的列值为空,有的不为空。现在就是要把不为空的列值包括其列名取出来。需要列名是因为还要和另一张表去关联的。不过这样想来,等于是把一条数据要拆分了,好像是挺麻烦的。
我的异常网推荐解决方案:软件开发者薪资,http://www.aiyiweb.com/other/1391128.html