2017-08-07 75 views
0

我有一個場景,需要生成由值指定的聚合值。可能的聚合最小值,最大值,平均值和模式綜合計算基於特定列

Table 

ColumnA ColumnB 
    A  Min 
    A  Mode 
    A   Avg 

    B  Max 
    B  Avg 

    C  Mode 
    C  Min 

    D   Avg 

Table 2 

    ColumnC ColumnD ColumnE 

    Pr1  1.00  A 
    Pr2  2.00  A 
    Pr3  3.00  A 

    Pr1  4.00  B 
    Pr2  5.00  B 
    Pr4  1.00  B 

    Pr5  2.00  C 
    Pr6  6.00  C 

    Pr7  4.00  D 
    Pr8  5.00  D 

需要找到聚合如表1中所定義和使用在表2中彙總在columnD提供的值由每個類型ColumnA的分組。我想添加一部分存儲過程。

Output should be 

    ColumnF ColumnG ColumnH 
    A  Min  1.00 
    A  Mode  1.00 (if no mode exists take min value) 
    A   Avg  2.00 

    B  Max  5.00 
    B  Avg  3.34 

    C  Mode  2.00 
    C  Min  2.00 

    D   Avg  4.50 
+0

這兩張表如何關聯?這裏沒有唯一的連接鍵......你在做什麼? – scsimon

+0

表與列A和列E有關 – TechJump

回答

0

這裏是蠻力解決方案:

select t1.*, 
     (case when column_b = 'min' then min_d 
      when column_b = 'max' then max_d 
      when column_b = 'mode' then mode_d 
     end) as stat 
from t1 outer apply 
    (select min(d) as min_d, max(d) as max_d, avg(d) as avg_d, 
      (case when min(case when cnt = max_cnt then d end) = max(case when cnt = max_cnt then d end) 
        then max(case when cnt = max_cnt then d end) 
        else avg(d) 
       end) as mode_d 
     from (select t2.*, max(cnt) over() as max_cnt 
      from (select t2.*, count(*) over (partition by d) as cnt 
        from table2 t2 
       ) t2 
      ) t2 
    ) t2; 

mode計算是有點棘手,但我認爲你想要做什麼。