从 ANSI SQL 中的其他三个列中创建具有唯一整数的新列



我有一个包含许多列的表。

some_integer_1, some_integer_2, some_date, other
123             9               2019-01-01 "Some text"
123             9               2019-01-01 "Other text"
123             5               2019-02-01 "Hello"
56              3               2019-03-01 "World"

我想创建一个新表,将前三列映射到一个唯一的整数。因此,如果前三列相同,则唯一整数将相同:

some_integer_1  some_integer_2  some_date   unique_integer
123             9               2019-01-01  1
123             5               2019-02-01  2
56              3               2019-03-01  3

如果我有另一个使用 Netezza SQL 包含更多数据的表,则创建此表然后追加到该表的最有效方法是什么?

您可以使用dense_rank()来分配值:

select t.*,
dense_rank() over (order by some_integer_1, some_integer_2,  some_date) as unique_integer
from t;

我强烈建议您不要尝试将此类列添加到此表中。 前三列似乎表示某种实体。 也许是跑步或类似的东西。

您应该为此实体提供一个单独的表。 可以为此表分配一个键,如果您愿意,可以使用序列分配该键。 然后,前三列应替换为对此新表的外键引用。

最新更新