teradata sql查询以分配相同的行号
如何将相同的行号分配给序列记录组。参考下面的示例orderno.s 550和650有两组运行序列号 我想为每个对应的ordernumber和序列号集(1,2,3)分配相同的行号 预期结果应为新的rownumber列,如下所示teradata sql查询以分配相同的行号,teradata,Teradata,如何将相同的行号分配给序列记录组。参考下面的示例orderno.s 550和650有两组运行序列号 我想为每个对应的ordernumber和序列号集(1,2,3)分配相同的行号 预期结果应为新的rownumber列,如下所示 Order, Item, SequenceNumber , Rownumber 550, AA, 1, 1 550, AA, 2, 1 55
Order, Item, SequenceNumber , Rownumber
550, AA, 1, 1
550, AA, 2, 1
550, AA, 3, 1
550, AA, 1, 2
550, AA, 2, 2
550, AA, 3, 2
550, AA, 4, 2
650, AA, 1, 1
650, AA, 2, 1
650, AA, 3, 1
650, AA, 1, 2
650, AA, 2, 2
650, AA, 3, 2
650, AA, 4, 2
从现有表中,需要创建ALTER语句,以便添加新列
altertablemytablename添加行数INT代码>
语句成功执行后,现在可以更新所有记录
更新myTableName
设置Rownumber=(一些逻辑语句取决于表值)
编辑:
我很乐意为您提供帮助(一些逻辑语句…),但我不确定您从问题中寻找的是什么。从现有表中,您需要创建一个ALTER语句,以便可以添加新列
altertablemytablename添加行数INT代码>
语句成功执行后,现在可以更新所有记录
更新myTableName
设置Rownumber=(一些逻辑语句取决于表值)
编辑:
我很乐意为您提供帮助(一些逻辑语句…),但我不确定您的问题是什么。您需要嵌套的OLAP函数,但当然必须有一些列来排序您的数据:
SELECT ...
Sum(flag) -- create the group number
Over (PARTITION BY Order, Item
ORDER BY whatever
ROWS Unbounded Preceding)
FROM
(
SELECT ...
-- find the row where a new group starts
CASE WHEN Min(SequenceNumber)
Over (PARTITION BY Order, Item
ORDER BY whatever
ROWS BETWEEN 1 Preceding AND 1 Preceding) + 1 = SequenceNumber
THEN 0
ELSE 1
END AS flag
FROM tab
) AS dt
您需要嵌套的OLAP函数,但当然必须有一些列来对数据进行排序:
SELECT ...
Sum(flag) -- create the group number
Over (PARTITION BY Order, Item
ORDER BY whatever
ROWS Unbounded Preceding)
FROM
(
SELECT ...
-- find the row where a new group starts
CASE WHEN Min(SequenceNumber)
Over (PARTITION BY Order, Item
ORDER BY whatever
ROWS BETWEEN 1 Preceding AND 1 Preceding) + 1 = SequenceNumber
THEN 0
ELSE 1
END AS flag
FROM tab
) AS dt
下面是SQL:
SELECT
OrderNumber
, ItemCode
, SequenceNumber
, ROW_NUMBER() OVER(PARTITION BY OrderNumber, SequenceNumber, SequenceNumberCount) AS RowNumber
FROM
(
SELECT
OrderNumber
, ItemCode
, SequenceNumber
, COUNT(SequenceNumber) OVER(PARTITION BY OrderNumber, SequenceNumber ORDER BY OrderNumber, ItemCode) AS SequenceNumberCount
FROM
(
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 4 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 4 AS SequenceNumber
) AS data
) AS interim_calculation
ORDER BY
OrderNumber
, RowNumber
, SequenceNumber;
更新:
更新SQL以消除冗余复杂性,基于:
其结果是:
以下是SQL:
SELECT
OrderNumber
, ItemCode
, SequenceNumber
, ROW_NUMBER() OVER(PARTITION BY OrderNumber, SequenceNumber, SequenceNumberCount) AS RowNumber
FROM
(
SELECT
OrderNumber
, ItemCode
, SequenceNumber
, COUNT(SequenceNumber) OVER(PARTITION BY OrderNumber, SequenceNumber ORDER BY OrderNumber, ItemCode) AS SequenceNumberCount
FROM
(
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 550 AS OrderNumber, 'AA' As ItemCode, 4 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 1 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 2 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 3 AS SequenceNumber UNION ALL
SELECT 650 AS OrderNumber, 'AA' As ItemCode, 4 AS SequenceNumber
) AS data
) AS interim_calculation
ORDER BY
OrderNumber
, RowNumber
, SequenceNumber;
更新:
更新SQL以消除冗余复杂性,基于:
其结果是:
我不关心添加列,我在寻找填充rownumber列的逻辑(我的意思是为每一组运行序列和订单号分配相同的行号。你能解释一下下面的代码是做什么的吗?…求和(标志)——在上面创建组号吗(按顺序划分,项目顺序按前面无边界的任何行划分)我不确定如何求和(标志)创建新组号..在上述情况下..可能希望将这些注释添加到另一个问题中,以便通知他。从第一条注释中,我了解您现在要做的事情,但他为您提供了正确的答案。我不关心添加列,我在寻找填充行号列的逻辑(我的意思是为每一组运行序列和订单号分配相同的行号。你能解释一下下面的代码是做什么的吗?…求和(标志)——在上面创建组号吗(按顺序划分,项目顺序按前面无边界的任何行划分)我不确定如何求和(标志)创建新组号..在上述情况下..可能希望将这些注释添加到另一个问题中,以便通知他。从第一条注释中,我了解您现在想要做什么,但他为您提供了正确的答案。谢谢dnoeth,您的解决方案对我有效…谢谢dnoeth,您的解决方案对我有效…这太复杂了:行_Number()Over(按OrderNumber划分,SequenceNumber按SequenceNumber排序)AS rowname
返回相同的值而不嵌套:-)这太复杂了:Row_Number()Over(按OrderNumber划分,SequenceNumber按SequenceNumber排序)AS rowname
返回相同的值而不嵌套:-)