0

我有以下数据。需要识别缺失的行并计算平均值

LineNo Field1 Field2 年平均
1 法国巴黎 2019 100 
2 法国巴黎 2017 300 
3 法国尼斯 2018 200 
4 意大利 罗马 2019 50 
5 意大利 罗马 2018 500 
6 意大利 罗马 2017 250 

需要计算所有年份(2019、2018、2017)的平均值。

因此,对于法国和巴黎的组合 - 缺少 2018 年。
所以对于法国和尼斯 - 缺少 2019 年和 2017 年。对于意大利和罗马的组合,我们有所有记录。

因此,对于缺少的组合,需要计算如下平均值(公式,在所有情况下总和/3,无论存在年数)

最终数据如下所示。

LineNo Field1 Field2 Year Value
1 France Paris 2019 100 
2 France Paris 2017 300 
3 France Nice 2017 200 
4 Italy Rome 2019 50 
5 Italy Rome 2018 500 
6 Italy Rome 2017 250 
*7 France Paris 2018 133 
*8 France Nice 2018 66 
*9 France不错 2019 66 

7,8,9线是新的

4

1 回答 1

1

您可以使用类似下面的内容来获取空白行,然后更新语句可以将“0”值更新为平均值

SELECT DISTINCT
        [year]
 INTO   #allyears
 FROM   #temp
 -- this is to get all the years in a lookup  
 ;WITH   cte_t
          AS ( SELECT   place1 ,
                        place2 ,
                        CASE WHEN a.year = t.year THEN val
                             ELSE 0
                        END AS val ,
                        a.year ,
                        ROW_NUMBER() OVER ( PARTITION BY place1, place2,
                                            a.year ORDER BY CASE
                                                              WHEN a.year = t.year
                                                              THEN val
                                                              ELSE 0
                                                            END DESC ) rn
               FROM     #allyears AS a
                        CROSS JOIN #temp AS t
             )
    SELECT  place1 ,
            place2 ,
            year ,
            val 
    FROM    cte_t 
    WHERE rn = 1 
于 2019-05-23T14:12:28.740 回答