以下のコードでエラーが発生します。ここでは、集計関数の組み合わせとグループ化の組み合わせを使用します。Oracle SQLはリストと一緒に分析関数を使用するとエラーを投げます。グループ:
私は一人で、この分析部分を実行すると、それがうまく動作します(私はLISTAGG & GROUP BYを使用してはいけない場所)
SELECT
NUM,
SUM(COLLECTION) OVER(PARTITION BY STATUS ORDER by DT) AS TOTL_STUS
FROM
(select '1' AS NUM,'AA' NAME,'AC' AS STATUS, '10' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY') AS DT from dual
UNION ALL
select '2' AS NUM,'DC' NAME,'CL' AS STATUS, '100' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')-2 AS DT from dual
UNION ALL
select '3' AS NUM,'MA' NAME,'PE' AS STATUS, '110' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')-10 AS DT from dual
UNION ALL
select '1' AS NUM,'AA' NAME,'DS' AS STATUS, '200' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')+5 AS DT from dual
UNION ALL
select '2' AS NUM,'DC' NAME,'AC' AS STATUS, '1000' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY') AS DT from dual
)
;
私はLISTAGGを使用する場合、それBY & GROUPは(ノー分析列)の罰金を実行します
SELECT
NUM,
regexp_replace(listagg(STATUS, ',') within group (order by DT) ,'([^,]+)(,\1)*(,|$)', '\1\3')AS UNDUP_STATS
FROM
(select '1' AS NUM,'AA' NAME,'AC' AS STATUS, '10' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY') AS DT from dual
UNION ALL
select '2' AS NUM,'DC' NAME,'CL' AS STATUS, '100' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')-2 AS DT from dual
UNION ALL
select '3' AS NUM,'MA' NAME,'PE' AS STATUS, '110' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')-10 AS DT from dual
UNION ALL
select '1' AS NUM,'AA' NAME,'DS' AS STATUS, '200' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')+5 AS DT from dual
UNION ALL
select '2' AS NUM,'DC' NAME,'AC' AS STATUS, '1000' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY') AS DT from dual
)
GROUP BY NUM
;
しかし、私は両方を実行して実行します。
SELECT
NUM,
SUM(COLLECTION) OVER(PARTITION BY STATUS ORDER by DT) AS TOTL_STUS,
regexp_replace(listagg(STATUS, ',') within group (order by DT) ,'([^,]+)(,\1)*(,|$)', '\1\3')AS UNDUP_STATS
FROM
(select '1' AS NUM,'AA' NAME,'AC' AS STATUS, '10' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY') AS DT from dual
UNION ALL
select '2' AS NUM,'DC' NAME,'CL' AS STATUS, '100' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')-2 AS DT from dual
UNION ALL
select '3' AS NUM,'MA' NAME,'PE' AS STATUS, '110' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')-10 AS DT from dual
UNION ALL
select '1' AS NUM,'AA' NAME,'DS' AS STATUS, '200' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY')+5 AS DT from dual
UNION ALL
select '2' AS NUM,'DC' NAME,'AC' AS STATUS, '1000' AS COLLECTION,
TO_DATE('06/09/2017','MM/DD/YYYY') AS DT from dual
)
GROUP BY NUM
;
以下は、エラーをスローするサンプルクエリです。
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
Error at Line: 3 Column: 5
このエラーの原因を理解し、問題を解決するのに役立つ人がいますか。
このようなデータを作成するときには、「UNION」を使用することができないという悪い習慣があります。代わりに 'UNION ALL'を使用してください。 – mathguy
提案に感謝します。私はデータを複製していないことを知っています。サンプルデータ用です私はコードを更新しました。 – Kumaran