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 DSCMONTHGROUP 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 回答