GROUP BY 将 AS/400 日期格式转换为 SQL 日期

GROUP BY Converted AS/400 date format into SQL date

最终我想获取一些数据并在 AS/400(绿屏)中的 SQL 中按月分组。

这是初始 SQL 查询及其相应的结果:

SELECT ITNBRV, /* Item */
       ODDTRV, OQTYRV /* Order due due, Order quantity */
  FROM ORDREVLA /* MRP Recommendations */
 WHERE ITNBRV = '17000' OR ITNBRV = '19000' /* Returns only items 17000, 19000 */

我想获取该数据并将其总结如下:

Item number Order Due Date  Order Quantity
   17000         11/17           1296
   17000         12/17           1296
   17000         01/18           3564
   17000         02/18           3888
   19000         11/17          68100
   19000         12/17           1800
   19000         01/18          23220

这是我用来转换日期格式的:

  SELECT ITNBRV,
         month(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) ||'/'||
         year(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) AS Month_Year,
         OQTYRV
    FROM ORDREVLA
   WHERE ITNBRV = '17000' OR ITNBRV = '19000'

结果如下:

我尝试使用具有相同转化率的 GROUP BY:

  SELECT ITNBRV,
         month(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) ||'/'||
         year(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) AS Month_Year,
         OQTYRV
    FROM ORDREVLA
   WHERE ITNBRV = '17000' OR ITNBRV = '19000'
GROUP BY (month(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)))

但收到此错误消息:

Column ITNBRV or expression in SELECT list not valid.

谢谢!

不熟悉 AS/400 SQL,但看起来您需要按 INTBRV 分组并向 ORDREVLA 添加聚合。

SELECT 
         ITNBRV,
         month(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) ||'/'||
         year(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) AS Month_Year,
         SUM(OQTYRV) as OQTYRV_Total
FROM 
         ORDREVLA
WHERE 
         ITNBRV = '17000' OR ITNBRV = '19000'
GROUP BY (month(
             substr(ODDTRV,4,2) ||'/'||
             substr(ODDTRV,6,2) ||'/'||
             substr(ODDTRV,2,2))),
             ITNBRV

就个人而言,我更喜欢使用常见的 table 表达式 (CTE) 来处理这个问题..

with mmyy as (
SELECT 
         ITNBRV,
         month(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) ||'/'||
         year(
         substr(ODDTRV,4,2) ||'/'||
         substr(ODDTRV,6,2) ||'/'||
         substr(ODDTRV,2,2)) AS Month_Year,
         OQTYRV
FROM 
         ORDREVLA
WHERE 
         ITNBRV = '17000' OR ITNBRV = '19000'
)
select 
   itnbrv, month_year, sum(oqtyrv) as OQTYRV_Total
from
   mmyy
group by
   itnbrv, month_year