需要更好的 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 进行比较(如果总和相等或不相等,则执行您需要执行的任何操作)
只是一个解决这个问题的粗略想法。
只有当问题变得更具体时才能提供详细信息。
我有 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 进行比较(如果总和相等或不相等,则执行您需要执行的任何操作)
只是一个解决这个问题的粗略想法。 只有当问题变得更具体时才能提供详细信息。