2017-10-20 5 views
0

最終的に私は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 */ 

Query Result Screen Shot

私はそのデータを取得し、このようにそれを要約したいと思います:

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' 

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))) 

しかし、このエラーメッセージました:

Converted Dates

私は同じコンバージョン数でGROUP BYを使用しようとした

Column ITNBRV or expression in SELECT list not valid. 

ありがとう!

答えて

2

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 
+0

DB2は、SQL標準に従っています。これは、ISO/IEC 9075標準、パート1〜4,10,11,14です。v7.2およびv7.3は2016標準をサポートし、v7.1は以前の標準をサポートします。 – jmarkmurphy

+0

@jmarkmurphy:何かがまだオフです。「ODDTRV列またはSELECTリストの式が無効です」というエラーメッセージが表示されるようになりました。 – Sescopeland

+1

グループ内の(年(...))式が必要だと思っています... – Charles

0

あなたはそれがここに訂正する必要がありますので、私は、共通テーブル式(CTE)とこれを処理することを好む。私(AS/400 SQL)のための

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 
関連する問題