более простой способ получить результат, как показано следующим SQL-запросом (база данных Oracle) - PullRequest
0 голосов
/ 31 августа 2009

Может кто-нибудь сообщить нам более простой способ получить результат, как показано в следующем запросе? Нам нужно найти способ, который может показать нам тот же результат, что и следующий запрос:

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)

Вывод похож на:

    BIO_ID  PREV    CURR    PREV_1  CURR_1  PREV_2  CURR_2  PREV_3  CURR_3
5,032,130.00    -1  0   0   1           0   1
5,032,130.00    1   0   0   1   1   0   0   1
5,032,130.00            0   1           0   1
5,032,130.00            10  1   10  0   0   1
5,032,328.00    53  0   36  0   20  0       
5,032,328.00                            1   0
5,175,147.00    2   0                       
5,175,147.00            2   0               
5,175,147.00                                
21,073,129.00   17  0                   2   0
21,073,129.00   18  0   6   0   2   0       
21,073,129.00                           1   0
21,073,129.00                           3   0
21,073,129.00

1 Ответ

1 голос
/ 31 августа 2009

Я бы поменял деталь

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 
...

как может быть быстрее. Но я понятия не имею, как обойти вещи DECODE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...