我在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 = 12
和week = 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中执行此操作会有什么好处?
答案 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
。