2012-11-20 196 views
1

我收到一條消息,指出表達式是無效標識符。我也收到消息說單個組是無效的。請提出一個替代方案。按月分組計數百分比的SQL查詢

我有以下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 

回答

0

You ca不要在與其定義的相同範圍內使用列別名。

您必須將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 
+0

YYYAAAAAAAYYYYYYYYY !!!!!!!所以,我必須承認我不是新手,但不是SQL腳本中的常規人員。這是一個DUH!時刻。非常感謝,並有一個愉快的假期。 –