sql-server - 用以前的非空值填充缺失的数据 - 但仅限于简单的 SQL
问题描述
我有一个值表,需要用之前的非空值填写空白。
Store SKU YearNo MonthNo StockQty
001 010C 2018 6 34
001 010C 2018 7 NULL
001 010C 2018 8 NULL
001 010C 2018 9 46
002 010C 2018 6 15
002 010C 2018 7 14
002 010C 2018 8 NULL
002 010C 2018 9 NULL
在上面的例子中,我想用之前的非空值填充空值,所以在 SKU 010C 的存储 001 处,第 7 个月应该变成 34,第 8 个月应该是 34;在 SKU 010C 的商店 001 中,第 8 个月和第 9 个月应变为 14。
好的,有很多关于如何使用精美的 APPLY 和 CTE 以及语句等来执行此操作的帖子。但美中不足的是……
我必须仅使用拖放 ETL 工具功能来执行此操作。这意味着我可以选择字段,我可以应用简单的公式(例如,当 Stock 为 null 然后为 0 时的 CASE),我可以从下拉列表中选择连接(INNER、LEFT OUTER、RIGHT OUTER)。我不能手写自定义子选择、分区、withs、创建临时表或任何比 SQL 课程第一周更高级的东西。想想 MS Access 拖放查询生成器之类的东西。
我怎样才能做到这一点?任何人?
解决方案
好吧,您可以自加入您的表 N 次并使用coalesce
orisnull
或case
。他们都会得到你想要的。您需要知道有多少连续NULL
列来说明所有可能性。
declare @table table (store varchar(3), sku varchar(4), YearNo int, MonthNo int, StockQty int null)
insert into @table
values
('001','010C',2018,6,34),
('001','010C',2018,7,NULL),
('001','010C',2018,8,NULL),
('001','010C',2018,9,46),
('002','010C',2018,6,15),
('002','010C',2018,7,14),
('002','010C',2018,8,NULL),
('002','010C',2018,9,NULL)
select distinct
t1.store
,t1.sku
,t1.YearNo
,t1.MonthNo
,coalesce(t1.StockQty,t2.StockQty,t3.StockQty)
from
@table t1
left join @table t2 on
t2.store = t1.store
and t2.YearNo = t1.YearNo
and t2.MonthNo = t1.MonthNo -1
left join @table t3 on
t3.store = t1.store
and t3.YearNo = t1.YearNo
and t3.MonthNo = t1.MonthNo - 2
或者,作为更新声明...
update t1
set StockQty = coalesce(t1.StockQty,t2.StockQty,t3.StockQty)
from
@table t1
left join @table t2 on
t2.store = t1.store
and t2.YearNo = t1.YearNo
and t2.MonthNo = t1.MonthNo -1
left join @table t3 on
t3.store = t1.store
and t3.YearNo = t1.YearNo
and t3.MonthNo = t1.MonthNo - 2
select * from @table
推荐阅读
- elasticsearch - 缺少 Geoshape 时的 Elasticsearch 版本 7.6 错误
- regex - 是否有任何免费的方式来搜索不受严格限制和简单的 github(又名:搜索特殊字符或使用正则表达式)?
- powerbi - PowerBi:在 DAX 公式中返回 id
- javascript - 样式类的 BackgroundImage 对象没有被触发
- php - 无法对 foreach 值进行排名
- python - 正则表达式在 python 中不起作用,但在在线正则表达式工具中
- xpath - Xpath 结合了两个@class 元素
- r - R distinct() 不取出重复项
- kubernetes - Makefile 目标添加 k8s 集群配置
- asp.net - XMLReader.Create() 失败并出现 DirectoryNotFoundException