1

式が無効な識別子であるというメッセージが表示されます。また、単一の group by が無効であるというメッセージも表示されます。親切に代替案を提案してください。

次の Oracle SQL ステートメントがあります。

SELECT SUM(CASE
            WHEN PDRVARIANCE >= -1 then '1'
            WHEN PDRVARIANCE <-1 then '0'
          END) 
         / count(*) 
         * 100 as PercentCompliance ,
       TO_CHAR (ACTUALFINISHDATE,'MM/YY') AS DCSMONTH
  FROM    ACTIVITIES
WHERE DCSMONTH IS NOT NULL
GROUP BY DCSMONTH

既存のデータは次のようなものになります...

Variance     Month
   20       10/12
   3.2      10/12
   -4.2     10/12
   -27.8    10/12
   13       11/12
   3        11/12
   -1.2     12/12
   -2       12/12

望ましい結果は、分散条件ごとに「真」対「偽」のパーセンテージを実行し、月ごとにグループ化し、次のように表示することです...

Percent   Month
    50    10/12
    100   11/12
    0     12/12
4

1 に答える 1

0

列の別名は、それらが定義されたのと同じスコープでは使用できません。

置換GROUP BY DSCMONTHするGROUP BY TO_CHAR (ACTUALFINISHDATE,'MM/YY')(および where 句についても同じことを行う) か、クエリを別のクエリ内にラップする必要があります。

お気に入り、

select dcsmonth, sum(data) / count(*) * 100 percentcompliance 
  from (
SELECT CASE WHEN PDRVARIANCE >= -1 then 1
            WHEN PDRVARIANCE <-1 then 0 END data,
       TO_CHAR (ACTUALFINISHDATE,'MM/YY') AS DCSMONTH
  FROM  ACTIVITIES 
WHERE ACTUALFINISHDATE IS NOT NULL
)
GROUP BY DCSMONTH
于 2012-11-21T05:58:01.540 に答える