GROUP BY将AS/400日期格式转换为SQL日期
问题描述:
最终,我想在AS/400(绿色屏幕)中将SQL数据按月份分组。GROUP BY将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
答
个人而言,我更喜欢用公用表表达式(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
DB2为我,所以你有它正确的位置(AS/400 SQL)遵循SQL标准。这将是ISO/IEC 9075标准,第1-4,10,11和14部分.v7.2和v7.3支持2016标准,v7.1支持以前的标准。 – jmarkmurphy
@jmarkmurphy:有些东西仍然关闭,现在我收到错误消息“列ODDTRV或SELECT列表中的表达式无效。” – Sescopeland
认为你还需要组中的(年(...))表达式... – Charles