Teradata 如何动态地为偶数和奇数记录创建列?

Teradata 如何动态地为偶数和奇数记录创建列?,teradata,Teradata,我有一个关于Teradata的查询。我想添加一个额外的列,它将是一个VARCHAR。 它应该说明所选记录是偶数还是奇数 select id, name, CASE newColumn WHEN --- ??? from my table 像这样 id name newColumn 1 asdf odd 2 ts df even 32 htssdf odd 4 asdfsd even 23 gftht odd 我该怎么做呢?根据您的示例,

我有一个关于Teradata的查询。我想添加一个额外的列,它将是一个VARCHAR。 它应该说明所选记录是偶数还是奇数

select id, name, CASE newColumn WHEN  --- ???
from my table
像这样

id  name     newColumn
1   asdf     odd
2   ts df    even
32  htssdf   odd
4   asdfsd   even
23  gftht    odd

我该怎么做呢?

根据您的示例,我不知道您是如何对结果进行排序的。您需要定义排序顺序。让我们假设您将根据
id
编号执行此操作

SELECT id, name,
ROW_NUMBER() OVER(ORDER BY id) row_id,
CASE WHEN ROW_NUMBER() OVER(ORDER BY id) MOD 2 = 0 THEN 'Even' ELSE 'Odd' END newColumn
FROM my table
行id
是根据正在升序的
id
字段递增分配的。然后使用
MOD
函数确定数字除以一个值后是否有余数(在本例中为2)。结果如下所示:

id    name      row_id    newColumn
1     asdf      1         Odd
2     ts df     2         Even
4     asdfsd    3         Odd
23    gftht     4         Even
32    htssdf    5         Odd

根据你的例子,我不知道你是如何对结果进行排序的。您需要定义排序顺序。让我们假设您将根据
id
编号执行此操作

SELECT id, name,
ROW_NUMBER() OVER(ORDER BY id) row_id,
CASE WHEN ROW_NUMBER() OVER(ORDER BY id) MOD 2 = 0 THEN 'Even' ELSE 'Odd' END newColumn
FROM my table
行id
是根据正在升序的
id
字段递增分配的。然后使用
MOD
函数确定数字除以一个值后是否有余数(在本例中为2)。结果如下所示:

id    name      row_id    newColumn
1     asdf      1         Odd
2     ts df     2         Even
4     asdfsd    3         Odd
23    gftht     4         Even
32    htssdf    5         Odd

根据你的例子,我不知道你是如何对结果进行排序的。您需要定义排序顺序。让我们假设您将根据
id
编号执行此操作

SELECT id, name,
ROW_NUMBER() OVER(ORDER BY id) row_id,
CASE WHEN ROW_NUMBER() OVER(ORDER BY id) MOD 2 = 0 THEN 'Even' ELSE 'Odd' END newColumn
FROM my table
行id
是根据正在升序的
id
字段递增分配的。然后使用
MOD
函数确定数字除以一个值后是否有余数(在本例中为2)。结果如下所示:

id    name      row_id    newColumn
1     asdf      1         Odd
2     ts df     2         Even
4     asdfsd    3         Odd
23    gftht     4         Even
32    htssdf    5         Odd

根据你的例子,我不知道你是如何对结果进行排序的。您需要定义排序顺序。让我们假设您将根据
id
编号执行此操作

SELECT id, name,
ROW_NUMBER() OVER(ORDER BY id) row_id,
CASE WHEN ROW_NUMBER() OVER(ORDER BY id) MOD 2 = 0 THEN 'Even' ELSE 'Odd' END newColumn
FROM my table
行id
是根据正在升序的
id
字段递增分配的。然后使用
MOD
函数确定数字除以一个值后是否有余数(在本例中为2)。结果如下所示:

id    name      row_id    newColumn
1     asdf      1         Odd
2     ts df     2         Even
4     asdfsd    3         Odd
23    gftht     4         Even
32    htssdf    5         Odd

+谢谢你的回复。我知道这个
MOD
但是,我已经有了
id
列,并且它不是递增分配的。我的表正是上面的表。在SQL中无法为数据分配奇数/偶数,因为没有规则如何分配它(除非有order BY,否则行不会按特定顺序返回)。当然,如果这是您编写的应用程序,那么在客户端可能很容易计算得到。+1感谢您的回复。我知道这个
MOD
但是,我已经有了
id
列,并且它不是递增分配的。我的表正是上面的表。在SQL中无法为数据分配奇数/偶数,因为没有规则如何分配它(除非有order BY,否则行不会按特定顺序返回)。当然,如果这是您编写的应用程序,那么在客户端可能很容易计算得到。+1感谢您的回复。我知道这个
MOD
但是,我已经有了
id
列,并且它不是递增分配的。我的表正是上面的表。在SQL中无法为数据分配奇数/偶数,因为没有规则如何分配它(除非有order BY,否则行不会按特定顺序返回)。当然,如果这是您编写的应用程序,那么在客户端可能很容易计算得到。+1感谢您的回复。我知道这个
MOD
但是,我已经有了
id
列,并且它不是递增分配的。我的表正是上面的表。在SQL中无法为数据分配奇数/偶数,因为没有规则如何分配它(除非有order BY,否则行不会按特定顺序返回)。当然,如果是您编写的应用程序,那么在客户端可以很容易地计算出这一点。