首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SQL将表B中的空值替换为表A中的值

使用SQL将表B中的空值替换为表A中的值
EN

Stack Overflow用户
提问于 2019-04-02 04:42:22
回答 1查看 85关注 0票数 0

我有一张这样的桌子:

代码语言:javascript
复制
price_families (Table A):
ID     UPC      
1      123
1      456
2      789
2      111
1      121

和第二个表:

代码语言:javascript
复制
sales_volume (Table B): 
UPC    sales    volume  
123    13.99      2.99
456    null       null 
121    14.99      1.99
789    31.88     22.99
111    null       null 
121    null       null 

我想要的是将表B中的空值替换为同一产品系列的不同UPC的销售额/销量值(使用表A确定价格系列,加入UPC),并按销售说明、销量说明(针对每个价格系列)进行排序。

执行此操作的最佳方式是什么?我可以在这里使用coalesce(),或者使用case语句吗?

我的输出应该是这样的:

代码语言:javascript
复制
output (Table C): 
UPC    sales    volume  
123    13.99      2.99
456    13.99      2.99 
121    14.99      1.99
789    31.88     22.99
111    31.88     22.99 
121    13.99      2.99 
EN

回答 1

Stack Overflow用户

发布于 2019-04-02 04:47:30

嗯。。。一种方法使用元组进行赋值:

代码语言:javascript
复制
update b
    set (sales, volume) = (select b2.sales, b2.volume
                           from b b2 join
                                a
                                on b2.upc = a.upc
                           where b2.sales is not null and b2.volume is not null
                           order by b2.sales desc, b2.volume desc
                           limit 1
                          )
    where sales is null and volume is null;

编辑:

如果您只想要select查询:

代码语言:javascript
复制
select b.upc,
       coalesce(b.sales, b2.sales) as sales,
       coalesce(b.volume, b2.volume) as volume
from b left join lateral
     (select b2.sales, b2.volume
      from b b2 join
           a
           on b2.upc = a.upc
      where b2.sales is not null and b2.volume is not null
      order by b2.sales desc, b2.volume desc
      limit 1
     ) b2
     on 1=1;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55463276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档