需要更好的 SQL 查询和 Datstage 逻辑(仅使用文件)

Need Better SQL Query And Datstage Logic(Using Only Files)

我有 2 个文件,我需要写一个 SQL 查询来检查 Value1 列中的数据是否相等。

条件是:文件1中一个月最后一周的值加上下个月所有周的值应该等于文件2中一个月的值

在截图中,第4个月的最后一周(1523)和第5个月的所有周(9+0+2601+22)的值是文件1中的4155。

这应该等于文件 2 中第 4 个月 (4155) 的值。

该文件包含不同键和许多月和周的多条记录。

目前要从文件 1 执行此操作,我使用此 SQL:

SELECT 
    (A.VAL + B.VAL) AS OUTPUT
FROM
    (SELECT VALUE1 AS VAL 
     FROM File1 
     WHERE KEY1 = 'ABC' 
       AND MONTHNO = 4 
       AND WEEKNO = (SELECT MAX(WEEKNO) 
                     FROM File1 
                     WHERE KEY1 = 'ABC' AND MONTHNO = 4)) AS A,
   (SELECT SUM(VALUE1) AS VAL 
    FROM File1 
    WHERE KEY1 = 'ABC' 
      AND MONTHNO = 5   
    GROUP BY MONTHNO) AS B;

如果使用 SQL - 我需要更好的 SQL 查询以便对文件 1 的所有可用记录执行此查询。

和数据阶段:我计划在不使用数据阶段中的任何数据库阶段的情况下实现它。需要逻辑。

SELECT
  File2.MonthNo,
  File2.Key1,
  File2.Value1    AS File2Value1,
  File1.Value1    AS File1Value1,
  CASE WHEN File2.Value1 = File1.Value1 THEN 0 ELSE 1 END    AS difference
FROM
  File2
LEFT JOIN
(
  SELECT
    MonthNo,
    Key1,
    SUM(Value1)   AS Value1
  FROM
    File1
  GROUP BY
    MonthNo,
    Key1
)
  File1
    ON  File2.MonthNo = File1.MonthNo
    AND File2.Key1    = File1.Key1

对于数据阶段:

  • 使用顺序文件阶段读取文件(文件 ONE)
  • 按月和周对数据进行排序
  • 使用 Transformer 和 LastRowInGroup 功能来标记一个月的最后一周
  • 使用转换器来构建总和(在前一个转换器中标记的行需要计算到当前月份和下个月 - 所以要注意总和功能的重置功能)
  • 将结果加入另一个文件
  • 使用转换器将总和与文件二的值 1 进行比较(如果总和相等或不相等,则执行您需要执行的任何操作)

只是一个解决这个问题的粗略想法。 只有当问题变得更具体时才能提供详细信息。