5

我需要使用 select 语句提取行 ID。类似于 oracle 的行 ID 的东西。我将如何在 Teradata 中做到这一点?我正在尝试以下查询,但它抛出错误。

select rowid,emp_id,e_name from test;

Error msg : Syntax error: ROWID not allowed.

提前致谢。

4

1 回答 1

3

试试ROW_NUMBER()窗口聚合函数:

SELECT ROW_NUMBER() OVER(ORDER BY empid) AS RowID_
     , empid
     , empName
  FROM test;

与窗口聚合不同RANK()ROW_NUMBER()不允许在结果集中出现联系。您的另一种选择是IDENTITY在表格中使用一列,但这些列很乱并且会导致问题。ROW_NUMBER()如果您需要维护代理键,则更容易将其合并到您的 ETL 处理中。

需要注意的是,如果您的ORDER BYorPARTITION BY列有偏差,那么您STAT FUNCTION在查询计划中的步骤上的性能会受到大量数据的影响。该PARTITION BY子句是可选的,允许您定义一个窗口,ROW_NUMBER()当分区更改时,将在其中重置结果。不常用,ROW_NUMBER()但它可能会派上用场。

编辑 使用代理项唯一标识记录,而不必依赖 ETL 使用中的逻辑和表中的标识列。正确配置 IDENTITY 列在删除记录时不会重用任何域值。

于 2013-01-23T13:25:54.410 回答