在 redshift 中获取第 N 个非空列

麦克风

我有一个包含可空列集合的表。我需要做的是“左移”这些列,以便第 1 列包含第一个非空值,第 2 列包含第二个非空值等。

例如

This:

<null>, <null>, foo,    bar,    baz,    buz
<null>, <null>, <null>, <null>, foo,    bar
<null>, <null>, <null>, foo,    bar,    baz

需要变成这样:

foo,    bar,    baz,    buz,    <null>, <null>
foo,    bar,    <null>, <null>, <null>, <null>
foo,    bar,    baz,    <null>, <null>, <null>

我可以确定数据包含 0 或更多列,后跟 1 或更多非空列。

我可以想象一种通过无偿使用 CASE 语句来实现这一点的方法,但我宁愿不创造这样一个可憎的东西。

任何人都知道如何轻松完成这项工作?

戈登·利诺夫

我认为最简单的方法是 unpivot/pivot。你可以这样做:

select id,
       max(case when seqnum = 1 then col end) as col1,
       max(case when seqnum = 2 then col end) as col2,
       max(case when seqnum = 3 then col end) as col3,
       max(case when seqnum = 4 then col end) as col4,
       max(case when seqnum = 5 then col end) as col5,
       max(case when seqnum = 6 then col end) as col6
from (select t.*, row_number() over (partition by id order by pos) as seqnum
      from ((select id, col1 as col, 1 as pos from t) union all
            (select id, col2 as col, 2 as pos from t) union all
            (select id, col3 as col, 3 as pos from t) union all
            (select id, col4 as col, 4 as pos from t) union all
            (select id, col5 as col, 5 as pos from t) union all
            (select id, col6 as col, 6 as pos from t) 
           ) t
      where col is not null
     ) t
group by id;

因为 Redshift 是一个列式数据库,所以它union all应该与任何其他逆透视数据方式一样有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从列和前后列中返回第 1 2...n 个非空值

来自分类Dev

如何在Excel中获取第n个非空白列

来自分类Dev

如何在分支中获取第n个git日志

来自分类Dev

从Go中的函数获取第n个返回值

来自分类Dev

从列表列表中获取第n个列表

来自分类Dev

如何获取Javascript中的第n个表列值

来自分类Dev

fsharp从列表中获取第n个元素

来自分类Dev

如何在JavaScript中获取数组的第n个元素?

来自分类常见问题

在文本文件中获取第n列

来自分类Dev

Excel - 从相应的数据中获取第 2 个或第 n 个匹配的字符串

来自分类Dev

Python:如何从列表中获取第 n 个元素,其中 n 来自列表

来自分类Dev

如何在命令行中获取上一个命令的第n个参数?

来自分类Dev

获取jq json解析中的第一个(或第n个)元素

来自分类Dev

获取Python中每个月的第n个日期之前的最后一个日期

来自分类Dev

获取另一个列表内列表中的第n个项目

来自分类Dev

VBA-获取数组中第n个最大值的索引

来自分类Dev

在批处理脚本中获取txt文件的第n个项目

来自分类Dev

在sqlite中获取第n个最高价值行

来自分类Dev

如何在Java中的第n个“-”(破折号)之后获取字符串?

来自分类Dev

从Hive SQL中的第n个存储桶获取所有记录

来自分类Dev

jQuery / Javascript:如何获取一组对中的第n个对?

来自分类Dev

MySQL:获取表中每个组的第n个最大值

来自分类Dev

从Java列表中获取具有满足流条件的第n个元素的子列表

来自分类Dev

如何在jQuery中获取div以下的第N个元素

来自分类Dev

单击按钮时获取行中的第 n 个单元格

来自分类Dev

获取 Neo4J 数据库中 MATCH 查询返回的第 n 个结果

来自分类Dev

C 获取字符串中的第 n 个单词

来自分类Dev

获取字符串中第 n 个出现的索引

来自分类Dev

如何在javascript中的第n个点之前获取子字符串

Related 相关文章

  1. 1

    如何从列和前后列中返回第 1 2...n 个非空值

  2. 2

    如何在Excel中获取第n个非空白列

  3. 3

    如何在分支中获取第n个git日志

  4. 4

    从Go中的函数获取第n个返回值

  5. 5

    从列表列表中获取第n个列表

  6. 6

    如何获取Javascript中的第n个表列值

  7. 7

    fsharp从列表中获取第n个元素

  8. 8

    如何在JavaScript中获取数组的第n个元素?

  9. 9

    在文本文件中获取第n列

  10. 10

    Excel - 从相应的数据中获取第 2 个或第 n 个匹配的字符串

  11. 11

    Python:如何从列表中获取第 n 个元素,其中 n 来自列表

  12. 12

    如何在命令行中获取上一个命令的第n个参数?

  13. 13

    获取jq json解析中的第一个(或第n个)元素

  14. 14

    获取Python中每个月的第n个日期之前的最后一个日期

  15. 15

    获取另一个列表内列表中的第n个项目

  16. 16

    VBA-获取数组中第n个最大值的索引

  17. 17

    在批处理脚本中获取txt文件的第n个项目

  18. 18

    在sqlite中获取第n个最高价值行

  19. 19

    如何在Java中的第n个“-”(破折号)之后获取字符串?

  20. 20

    从Hive SQL中的第n个存储桶获取所有记录

  21. 21

    jQuery / Javascript:如何获取一组对中的第n个对?

  22. 22

    MySQL:获取表中每个组的第n个最大值

  23. 23

    从Java列表中获取具有满足流条件的第n个元素的子列表

  24. 24

    如何在jQuery中获取div以下的第N个元素

  25. 25

    单击按钮时获取行中的第 n 个单元格

  26. 26

    获取 Neo4J 数据库中 MATCH 查询返回的第 n 个结果

  27. 27

    C 获取字符串中的第 n 个单词

  28. 28

    获取字符串中第 n 个出现的索引

  29. 29

    如何在javascript中的第n个点之前获取子字符串

热门标签

归档