Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
teradata sql查询以分配相同的行号_Teradata - Fatal编程技术网

teradata sql查询以分配相同的行号

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

如何将相同的行号分配给序列记录组。参考下面的示例orderno.s 550和650有两组运行序列号 我想为每个对应的ordernumber和序列号集(1,2,3)分配相同的行号

预期结果应为新的rownumber列,如下所示

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
返回相同的值而不嵌套:-)