通过以下sql查询(oracle数据库)更容易获得结果

通过以下sql查询(oracle数据库)更容易获得结果,sql,oracle,plsql,Sql,Oracle,Plsql,有人能告诉我们一种更简单的方法来获得下面的查询结果吗?我们需要找到一种方法来显示与以下查询相同的结果: SELECT DISTINCT A.bio_id , DECODE(A.wk_units2 - B.wk_units1,0,NULL,A.wk_units2) prev, DECODE(A.wk_units2 - B.wk_units1,0,NULL,B.wk_units1) curr, DECODE(A.wk_units3 -B.wk_units2,0,NULL,

有人能告诉我们一种更简单的方法来获得下面的查询结果吗?我们需要找到一种方法来显示与以下查询相同的结果:

SELECT  DISTINCT A.bio_id ,
    DECODE(A.wk_units2 - B.wk_units1,0,NULL,A.wk_units2) prev,
    DECODE(A.wk_units2 - B.wk_units1,0,NULL,B.wk_units1) curr, 
    DECODE(A.wk_units3 -B.wk_units2,0,NULL,A.wk_units3) prev, 
    DECODE(A.wk_units3 -B.wk_units2,0,NULL,B.wk_units2) curr, 
    DECODE(A.wk_units4 -B.wk_units3,0,NULL,A.wk_units4) prev, 
    DECODE(A.wk_units4 -B.wk_units3,0,NULL,B.wk_units3) curr,
    DECODE(A.wk_units5 -B.wk_units4,0,NULL,A.wk_units5) prev, 
    DECODE(A.wk_units5 -B.wk_units4,0,NULL,B.wk_units4) curr, 
    DECODE(A.wk_units6 -B.wk_units5,0,NULL,A.wk_units6) prev, 
    DECODE(A.wk_units6 -B.wk_units5,0,NULL,B.wk_units5) curr 
     .                                            .
     .                                            .
     .                                            .
   DECODE(A.wk_units105 -B.wk_units104,0,NULL,A.wk_units105) prev, 
   DECODE(A.wk_units105 -B.wk_units105,0,NULL,B.wk_units104) curr 



    FROM 
    cnt_sls_dm.fct_sales_summary A,
    cnt_sls_dm.fct_sales_summary B 
    WHERE 
    A.bio_id=B.bio_id AND A.bio_id<>0 
    AND ROWNUM<25 
    AND ( A.wk_units2<> B.wk_units1 
    OR  A.wk_units3<> B.wk_units2 
    OR  A.wk_units4<> B.wk_units3 
    OR  A.wk_units5<> B.wk_units4 
    OR  A.wk_units6<> B.wk_units5
     .                        .
     .                        .
     .                        .
    OR  A.wk_units105<>B.wk_units104)
我要换个角色

AND ( A.wk_units2<> B.wk_units1 
OR  A.wk_units3<> B.wk_units2 
OR  A.wk_units4<> B.wk_units3  ...

因为它可能更快。但是我不知道如何绕过解码的东西。

你使用的是什么版本的Oracle?@Irveen;如果建议的解决方案有效,你应该提供反馈以回答其他问题。@Irveen:你说的“更容易”是什么意思?如果你想让我们重写查询,你应该描述生成结果的规则,并为未规范化的表提供解释。我使用的是oracle 10g——是的,需要编写一个带有循环的sql查询,这样它就可以为我们获取第1周到第105周的数据…………意味着我们需要在当前sql查询中实现迭代主体建议如何通过程序、功能或包来实施
AND ( A.wk_units2<> B.wk_units1 
OR  A.wk_units3<> B.wk_units2 
OR  A.wk_units4<> B.wk_units3  ...
AND NOT ( A.wk_units2 == B.wk_units1 
OR A.wk_units3== B.wk_units2 
...