抱歉以不正当的方式构建问题,但我想在下面澄清我的问题的逻辑。希望它有助于理解我的问题
如果我将下表作为样本数据:
+-----+-----------+------+
| a | b | c |
+-----+-----------+------+
| 100 | Apple | NULL |
| 100 | Orange | 1.05 |
| 101 | Apple | NULL |
| 102 | Apple | NULL |
| 102 | Dont care | NULL |
| 103 | Apple | NULL |
| 103 | Dont care | NULL |
| 103 | Orange | 1.01 |
+-----+-----------+------+
现在我想填充列C的值,其中列B = Apple为NULL。该值将取自相同列A值的列B =橙色。
如果对于列A的给定的不同值,我们有列B = Apple但不具有列B =橙色,那么列C的值(对于列A和列B的给定的不同值) = Apple)应填充C列的值(对于列A的下一个不同的升序值,列B =橙色)。
所以我的输出应该是这样的:
+-----+-----------+------+
| a | b | c |
+-----+-----------+------+
| 100 | Apple | 1.05 |
| 100 | Orange | 1.05 |
| 101 | Apple | 1.01 |
| 102 | Apple | 1.01 |
| 102 | Dont care | NULL |
| 103 | Apple | 1.01 |
| 103 | Dont care | NULL |
| 103 | Orange | 1.01 |
+-----+-----------+------+
由于
答案 0 :(得分:1)
您可以使用outer apply
执行此操作。
select t1.a,t1.b
,case when t1.b='Apple' and t1.c is null then t2.new_c else c end as new_c
from tbl t1
outer apply (select top 1 c as new_c
from tbl t2 where t2.a>=t1.a and t2.b='Orange'
order by a) t2