SQL服务器中显式缺失值的隐式缺失值

时间:2018-06-14 11:58:29

标签: sql sql-server

我在SQL服务器中有一个如下所示的数据表(在R中生成):

df <- data.frame(            
week = c(1,1,1,2,3,3,3),     
id = c(12,13,14,12,12,13,14),
x = sample(c(100:200), 7))   
df                           
#>   week id   x
#> 1    1 12 199
#> 2    1 13 164
#> 3    1 14 145
#> 4    2 12 139
#> 5    3 12 130
#> 6    3 13 154
#> 7    3 14 127

现在,正如您所看到的,id = 12week = 2有一些隐含的缺失值。

我想编写一个SQL查询,将这些变为显式缺失值,如下所示:

#>    week    id     x
#> 1    1.   12.   199
#> 2    1.   13.   164
#> 3    1.   14.   145
#> 4    2.   12.   139
#> 5    2.   13.    NA
#> 6    2.   14.    NA
#> 7    3.   12.   130
#> 8    3.   13.   154
#> 9    3.   14.   127

在SQL中执行此操作会有什么好处?

1 个答案:

答案 0 :(得分:1)

您可以使用cross join然后left join构建行以引入值:

select w.week, i.id, s.x
from (select distinct week from sample) w cross join
     (select distinct id from sample) i left join
     sample s
     on s.week = w.week and s.id = s.id;

请注意,在SQL中,NA将表示为NULL