2016-10-05 12 views
0
SELECT c.DESCRIPTION, 
     fobt.OBJECT_ID, 
     fobt.FA_OBJECT_TRANS_VALUE_TYPE, 
     fobt.OBJECT_TRANSACTION_ID, 
     fobt.OBJECT_TRANSACTION_DATE, 
     fobt.AMOUNT, 
     fobt.FA_YEAR, 
     fobt.FA_PERIOD, 
     SUM(fobt.AMOUNT) OVER(
           PARTITION BY fobt. 
           ORDER BY fobt., fobt.OBJECT_TRANSACTION_DATE 
          ) AS RUNTOTAL, 
     DENSE_RANK() OVER(
          PARTITION BY fobt.OBJECT_ID 
          ORDER BY fobt.FA_YEAR DESC 
         ) RK1, 
     DENSE_RANK() 
      OVER(
        PARTITION BY fobt.OBJECT_ID, c.DESCRIPTION 
        ORDER BY 
         fobt.FA_YEAR, 
         fobt.FA_PERIOD, 
         c.DESCRIPTION DESC 
       ) 
      rnk2 
    FROM FA_OBJECT_TRANSACTION fobt 
     INNER JOIN (SELECT DISTINCT COMPANY, 
            OBJECT_ID, 
            OBJECT_TRANSACTION_ID, 
            CODE_C 
         FROM FA_) FT 
      ON  fobt. = FT. 
       AND fobt. = FT.OBJECT_TRANSACTION_ID 
     INNER JOIN CODE_C c 
      ON  FT.CODE_C = c.CODE_C 
       AND FT.COMPANY = c.COMPANY 
    WHERE  fobt.OBJECT_ID = 12345 
     AND fobt.FA_ IN ('Depreciation') 
ORDER BY 2, 4 

OBJECT_ID、DESCRIPTION、YEARおよびPERIODのDENSE_RANKを修正しようとしています。オブジェクトid = 1234は1つしかありませんが、2つの場所(ロッテルダムと南ウィンザー)があります。機器Aは、5/2015から3/1616にSouth Windsorの位置に記録され、その後、4/2016にロッテルダムに移された。私はOBJECT_IDとLOCATIONによってPARTITIONによってDENSE_RANKを持っていますが、by byは正しく機能していません。私は最新の日付(その機器の場所によって年と月を取っていきたいと思います。たとえば、3月20日にSouth Windsorにある機器Aは、その場所の最新の日付であるため、ランク1になります。ロケーションが変更されたので、ランク1のタグが付けられます。現在の結果と2番目の例が目的の結果です。case文が集計関数を使用してcase文でデータを集計しようとしています

+0

私の現在のコード。 –

+0

DENSE_RANK()OVER(fobt.OBJECT_ID、c.DESCRIPTION ORDER BY fobt.FA_YEAR、fobt.FA_PERIOD、c.DESCRIPTION desc) –

+0

完全なコードで質問を編集してください。あなたは小さなスニペットを表示していて、そこから何が起こっているのかを伝えるのは難しいです(fobt.FA_Yearを表示した場合、少なくともfobtはfromステートメントに表示されます)。あなたはそのように多くの助けを得るでしょう。 – Twelfth

答えて

0

すべてを正しく理解した場合fa_yearの後にDESCを追加する必要があります最後dense_rank

... dense_rank() over(partition by object_id, description 
          order by fa_year desc, fa_period desc) as rk2 

また​​

を使用しています。

テスト:

with t (DESCRIPTION, OBJECT_ID, transaction_id, AMOUNT, FA_YEAR, FA_PERIOD) 
     as (select 'South Windsor, CT', 22208, 278620, 257, 2015, 5 from dual union all 
      select 'South Windsor, CT', 22208, 287864, 257, 2015, 6 from dual union all 
      select 'South Windsor, CT', 22208, 305508, 257, 2015, 7 from dual union all 
      select 'South Windsor, CT', 22208, 322323, 257, 2015, 8 from dual union all 
      select 'South Windsor, CT', 22208, 330902, 257, 2015, 9 from dual union all 
      select 'South Windsor, CT', 22208, 340183, 257, 2015, 10 from dual union all 
      select 'South Windsor, CT', 22208, 350218, 257, 2015, 11 from dual union all 
      select 'South Windsor, CT', 22208, 359261, 257, 2015, 12 from dual union all 
      select 'South Windsor, CT', 22208, 374836, 257, 2016, 1 from dual union all 
      select 'South Windsor, CT', 22208, 382864, 257, 2016, 2 from dual union all 
      select 'South Windsor, CT', 22208, 388910, 257, 2016, 3 from dual union all 
      select 'Rotterdam, NY',  22208, 388915, 257, 2016, 4 from dual) 
select description, transaction_id, fa_year, fa_period, 
     sum(amount) over (partition by object_id order by fa_year, fa_period) total, 
     dense_rank() over(partition by object_id order by fa_year desc) rk1, 
     dense_rank() over(partition by object_id, description 
          order by fa_year desc, fa_period desc) rk2 
    from t 
    order by object_id, transaction_id 

出力:

DESCRIPTION  TRANSACTION_ID FA_YEAR FA_PERIOD  TOTAL RK1 RK2 
----------------- -------------- ---------- ---------- ---------- ------ ------ 
South Windsor, CT   278620  2015   5  257  2  11 
South Windsor, CT   287864  2015   6  514  2  10 
South Windsor, CT   305508  2015   7  771  2  9 
South Windsor, CT   322323  2015   8  1028  2  8 
South Windsor, CT   330902  2015   9  1285  2  7 
South Windsor, CT   340183  2015   10  1542  2  6 
South Windsor, CT   350218  2015   11  1799  2  5 
South Windsor, CT   359261  2015   12  2056  2  4 
South Windsor, CT   374836  2016   1  2313  1  3 
South Windsor, CT   382864  2016   2  2570  1  2 
South Windsor, CT   388910  2016   3  2827  1  1 
Rotterdam, NY    388915  2016   4  3084  1  1 
+0

ありがとうございました。あなたは私の質問に答えました。 –

関連する問題