한 행의 데이터 만 반환해야하는 Oracle 쿼리가 있습니다 (불행히도 DBMS 버전을 알지 못합니다). 또한 단일 SELECT 쿼리 여야하므로 임시 테이블 및 매개 변수 선언은 허용되지 않습니다.CTE를 사용하는 단일 Oracle SQL 쿼리에서 "GROUP BY와 일치하지 않는 SELECT 목록"오류가 발생합니다.
먼저 GROUP BY 조건으로 사용되는 첫 번째 열을 제외한 모든 열의 값을 집계하는 CTE를 사용합니다. 하나의 행에 모든 값을 표시해야합니다. (필터 된 CTE에 3 개의 CROSS JOIN을 사용하고 하나의 행으로 된 세 개의 데이터 집합을 결합하여 한 행의 데이터 집합을 생성합니다).
CTE (전체 CTE가 아닌 SELECT 만)를 실행하면 오류가 발생하지 않습니다. 하지만이 SELECT 문을 WITH ... AS 구문으로 래핑하면 Oracle SQL Developer 오류가 발생합니다.
다음WITH
FRUITDATASET AS (
SELECT
-- FROM HERE, ORACLE SQL DEVELOPER MARKS LINES AS ERRONEOUS
FRUITTYPE,
COUNT(LONDONFRESH) AS LONDONFRESH,
COUNT(BERLINFRESH) AS BERLINFRESH,
SUM(0) AS LONDONSTALE,
SUM(0) AS BERLINSTALE
-- FROM HERE, THE QUERY IS VALID AGAIN
FROM
[...]
GROUP BY
FRUITTYPE
UNION ALL
SELECT
-- FROM HERE, THE ERROR HAPPENS AGAIN
FRUITTYPE,
SUM(0) AS LONDONFRESH,
SUM(0) AS BERLINFRESH,
COUNT(LONDONSTALE) AS LONDONSTALE,
COUNT(BERLINSTALE) AS BERLINSTALE
-- FROM HERE IT'S OKAY
FROM
[...]
GROUP BY
FRUITTYPE
)
내가 사용하는 방법 CTE입니다 : 여기
은 CTE입니다 내가 SQL Developer에서 실행할 때SELECT
SUM(APPLES.LONDONFRESH) AS LONDONFRESHAPPLES,
SUM(APPLES.BERLINFRESH) AS BERLINFRESHAPPLES,
SUM(APPLES.LONDONSTALE) AS LONDONSTALEAPPLES,
SUM(APPLES.BERLINSTALE) AS BERLINSTALEAPPLES,
SUM(GRAPES.LONDONFRESH) AS LONDONFRESHGRAPES,
SUM(GRAPES.BERLINFRESH) AS BERLINFRESHGRAPES,
SUM(GRAPES.LONDONSTALE) AS LONDONSTALEGRAPES,
SUM(GRAPES.BERLINSTALE) AS BERLINSTALEGRAPES
FROM
DUAL
CROSS JOIN FRUITDATASET APPLES
ON APPLES.FRUITTYPE = 'APPLE'
CROSS JOIN FRUITDATASET GRAPES
ON GRAPES.FRUITTYPE = 'GRAPE'
쿼리 어쨌든 실행하지만 보고서에 넣어 경우 , 예외를 throw합니다. 나는 퍼팅을 시도했다.
NULL AS LONDONFRESH
[...]
GROUP BY
FRUITTYPE,
NULL
그러나 여전히 작동하지 않는다. 이 쿼리에 어떤 문제가 있는지 알 수 있습니까?
편집 : 나는 아마 분석 함수를 사용하여이 문제를 해결할 생각 : 지금 내가 서버에서이 솔루션을 확인해 드릴 수 없습니다
WITH
FRUITDATASET AS (
SELECT
*
FROM (
SELECT
DISTINCT FRUITTYPE,
COUNT(LONDONFRESH) OVER(PARTITION BY FRUITTYPE) AS LONDONFRESH,
COUNT(BERLINFRESH) OVER(PARTITION BY FRUITTYPE) AS BERLINFRESH,
SUM(NULL) OVER(PARTITION BY FRUITTYPE) AS LONDONSTALE,
SUM(NULL) OVER(PARTITION BY FRUITTYPE) AS BERLINSTALE
FROM
[...]
)
UNION ALL
SELECT
*
FROM (
SELECT
DISTINCT FRUITTYPE,
SUM(NULL) OVER(PARTITION BY FRUITTYPE) AS LONDONFRESH,
SUM(NULL) OVER(PARTITION BY FRUITTYPE) AS BERLINFRESH,
COUNT(LONDONSTALE) OVER(PARTITION BY FRUITTYPE) AS LONDONSTALE,
COUNT(BERLINSTALE) OVER(PARTITION BY FRUITTYPE) AS BERLINSTALE
FROM
[...]
)
)
을, 그러나 나는 즉시 답변을 게시합니다 내가 알기 엔.
예외는 무엇입니까? 누가 예외를 던집니까? –
@SamuelRenold 보고서 엔진이 단일 그룹 그룹 함수 java.sql.SQLSyntaxErrorException이 아닌 ORA-00973을 발생시킵니다. – ProminentPotato