首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将空值赋给雅典娜中的每个ID (Presto)

将空值赋给雅典娜中的每个ID (Presto)
EN

Stack Overflow用户
提问于 2019-07-24 21:44:20
回答 2查看 2.6K关注 0票数 2

下面是我最初的数据集的样子

代码语言:javascript
复制
prof_id id title
1       5  A
1       5  B
1       5  C
1       5  D
2       5  C
2       5  D
2       5  E
NA      5  F 
NA      5  G

下面是新表的样子:

代码语言:javascript
复制
prof_id id title
1       5  A
1       5  B
1       5  C
1       5  D
1       5  F
1       5  G
2       5  C
2       5  D
2       5  E
2       5  F 
2       5  G

对于prof_id具有空值的任何行都应该归因于所有的prof_id。我提供了一个示例,其中有两个‘prof_id’,但也有一个有1或0 prof_id的实例。

  • 对于1,所有null都应该归因于单个prof_id
  • 对于0,保持原样。

我对SQL并不熟悉,所以我不知道如何开始。如有任何指导,将不胜感激。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-07-24 21:57:08

在这种情况下,您需要做交叉连接,实质上是将两个表相乘在一起。

首先挑出所有的空白处:

代码语言:javascript
复制
select id, title from table where prof_id is null

然后选择要应用于所有表的prof_id

代码语言:javascript
复制
select distinct prof_id from table where prof_is is not null

在一起进行交叉连接,然后将其余的“好”数据合并回来。

代码语言:javascript
复制
(select distinct prof_id from table where prof_is is not null)
CROSS JOIN
(select id, title from table where prof_id is null)

UNION ALL

(select prof_id, id, title from table where prof_id is not null)
票数 1
EN

Stack Overflow用户

发布于 2019-07-24 23:17:18

可以使用cross join生成所有行。然后使用union all将其与其余数据结合起来。

以下语法应该可以工作:

代码语言:javascript
复制
select p.prof_id, i.id, t.title
from (select distinct prof_id
      from t
      where prof_id <> 'NA'  -- or do you mean is not null
     ) p cross join
     (select distinct id from t) i cross join
     (select distinct title
      from t
      where prof_id = 'NA'   -- or is null
     ) t
union all
select prof_id, id, title
from t
where prof_id <> 'NA'        -- or is not null
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57191650

复制
相关文章

相似问题

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