2009-08-31 19 views
-1

次の問合せで示すように、結果を取得する簡単な方法をお聞かせください。私たちは、私たちに次のクエリと同じ結果を示すことができる方法を見つける必要があります。次のSQL問合せ(oracleデータベース)に示すように結果を取得する簡単な方法

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

使用しているOracleのバージョンは? – David

+0

@Irveen;提案された解決策が機能する場合は、フィードバックを提出します/追加の質問に答える必要があります。 – tuergeist

+0

@リヴェン:「簡単」とはどういう意味ですか?クエリを書き直したい場合は、結果を生成するためのルールを記述し、劇的に非正規化されたテーブルの説明を提供する必要があります。 – APC

答えて

1

私は一部を変更したい

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のものを迂回することは考えていません。

関連する問題