2014-12-08 162 views
-4

我需要一个SQL查询/函数,它将找出数位的总和,它出现在偶数位置和数字的总和位于奇数位置。SQL查询来计算奇数和偶数的位数总和

实施例:

如果号码是440065385

x=4+0+6+3+5=18(x is holding sum of odd positions) 
y=4+0+5+8=17 (y holds the sum of even positions). 

感谢。

+2

为什么会有人要编这个使用SQL? : - | – Smutje 2014-12-08 07:56:18

+2

不要将SQL用于没有设计的事情。这只是错误的而不是表现! – 2014-12-08 07:58:31

+0

固定的位数是多少?什么是列的数据类型? – 2014-12-08 07:59:09

回答

1

可以使用水平模仿迭代并连接通过以达到相同的

with iterate as 
(select level as i from dual connect by level <=25) 
select 
     table1.column1, 
     sum(decode(mod(iterate.i,2),0,substr(table1.column1,iterate.i,1))) sum_even, 
     sum(decode(mod(iterate.i,2),1,substr(table1.column1,iterate.i,1))) sum_old 
from table1 ,iterate 
where iterate.i <=length(table1.column1) 
group by table1.column1 
1

你可以用数字表加入你的表格,将所有数字拆分成若干行,然后分别计算赔率和位置数字。

with positions(position) as 
    (select level from dual connect by level <=25 
    ), 
digits as 
    (
    select 
     t1.v, 
     n.position , 
     cast(substr(t1.v ,length(t1.v) - n.position + 1, 1) as int) as digit 
    from my_table t1 left join positions n 
    on n.position <= length(t1.v) 
    ) 
select 
    v, 
    sum(case when mod(position,2)=0 then digit else 0 end) as evensum, 
    sum(case when mod(position,2)=1 then digit else 0 end) as oddsum 
from 
    digits 
group by 
    v 

测试Sql Fiddle,结果:

V   EVENSUM ODDSUM 
440065385 17  18