「列があいまいに定義されている」というメッセージが表示され続けます。
WITH CountData as (
SELECT BOARD_RATE_T1,
BOARD_RATE_T3,
RENTAL_START_DATE,
RENTAL_END_DATE,
(BOARD_RATE_T3 - BOARD_RATE_T1) AS Countt
FROM PPSS.PA_OA_RATE_JUST
),
GroupCount AS
(
SELECT BOARD_RATE_T1,
BOARD_RATE_T3,
Countt,
CASE
WHEN Countt < 500 THEN 'Under 500'
WHEN Countt BETWEEN 500 AND 5000 THEN '500 - 5000'
WHEN Countt BETWEEN 5000 AND 10000 THEN '5000 - 10000'
WHEN Countt > 10000 THEN 'Over 10000'
ELSE 'Invalid Count'
END AS Countt
FROM CountData
)
SELECT COUNT(*) AS CountGrpCount,
Countt Groups
FROM GroupCount;
を参照Countt
していて、で2回定義されているため、最後のクエリはエラーをスローしていますGroupCount
。オラクルはあなたがどちらを意味するのかわかりません。
あいまいな列エラーを乗り越えると、最終的なクエリで問題が発生します。OracleはGROUP BY
、MySQLとは異なり、集計クエリ内のすべての非集計値に対してを要求することに厳密です。定数やのような関数のような例外がありますがSYSDATE
、それはこの質問の範囲外です。
「500未満」、「500〜5000」などでカウントを取得しようとしている場合は、クエリについて気付いたことがいくつかあります。
あなたは必要としないBOARD_RATE_T1
、BOARD_RATE_T2
、RENTAL_START_DATE
およびRENTAL_END_DATE
列を。
CASE
ロジックを少し変更することで、レート差カテゴリステートメントを短縮し、エラーが発生しにくくすることができます。
ステートメントのELSE
条件に当てはまる唯一の方法CASE
は、ifBOARD_RATE_T1
および/またはBOARD_RATE_T3
nullです。両方が必須の(NOT NULL
)値である場合は、を省略できますELSE
。
このクエリはカウントを提供します。他の値が必要で、質問を短くするためにそれらをハッキングしていた場合は、お詫びします:)
WITH CountData AS (
SELECT BOARD_RATE_T3 - BOARD_RATE_T1 AS RateDiff
FROM PPSS.PA_OA_RATE_JUST
),
GroupCount AS (
SELECT
CASE
WHEN RateDiff < 500 THEN 'Under 500'
WHEN RateDiff < 5000 THEN '500 - 5000'
WHEN RateDiff < 10000 THEN '5000 - 10000'
ELSE 'Invalid Count'
END AS RateDiffCategory
FROM CountData
)
SELECT
RateDiffCategory,
COUNT(*)
FROM GroupCount
GROUP BY
RateDiffCategory
ORDER BY
RateDiffCategory
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加