-1

私はテーブルを持っています

DPN      Incidents  wk32        wk31             wk30            wk29
15326868    2.00    16,020.98   9,586.14        
13655518    2.00    15,246.40   2,619.89        
13592065    4.00    4,138.67    7,851.41    7,725.56          7,593.11
13968309    4.00    3,027.89    3,788.18    10,155.71         2,328.68
13533086    4.00    10,266.52   6,479.47    8,761.08         10,949.50
13838079    3.00    5,890.04    1,214.42                     10,445.45

彼らが topx=2 を入力した場合

出力は次のようになります

DPN # of Incidents  wk32               wk31     wk30             wk29
15326868    2.00    16,020.98       9,586.14        
13655518    1.00    15,246.40           
13592065    1.00                    7,851.41                 
13968309    1.00                              10,155.71        
13533086    2.00                              8,761.08       10,949.50      
13838079    1.00                                             10,445.45 

上記の出力は、毎週降順でソートされ、上記と同じ形式で表示され、インシデントの数も再計算されます。Incidents は、それぞれに値が存在する列の数です。その方法を教えてください。

4

1 に答える 1

1

これにはいくつかのピースがあります。row_number()1つ目は、各週の上位 2 つを特定するために使用します。2 つ目は値をこれら 2 つに制限することであり、3 つ目は再計算incidentsです。

select DPN,
       sum((case when wk32 is not null then 1 else 0 end) +
           (case when wk31 is not null then 1 else 0 end) +
           (case when wk30 is not null then 1 else 0 end) +
           (case when wk29 is not null then 1 else 0 end)
          ) as incidents,
       wk32, wk31, wk30, wk29
from (select DPN,
             (case when seqnum_wk32 <= 2 then wk32 end) as wk32,
             (case when seqnum_wk31 <= 2 then wk32 end) as wk31,
             (case when seqnum_wk30 <= 2 then wk32 end) as wk30,
             (case when seqnum_wk29 <= 2 then wk32 end) as wk29
      from (select t.*,
                   row_number() over (order by wk32 desc) as seqnum_wk32,
                   row_number() over (order by wk31 desc) as seqnum_wk31,
                   row_number() over (order by wk30 desc) as seqnum_wk30,
                   row_number() over (order by wk29 desc) as seqnum_wk29
           from t
          ) t
     ) t
order by wk32 desc, wk31 desc, wk30 desc, wk29 desc;
于 2013-08-12T11:06:15.830 に答える