首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按月分组盘点百分比的SQL查询

按月分组盘点百分比的SQL查询
EN

Stack Overflow用户
提问于 2012-11-21 05:41:57
回答 1查看 779关注 0票数 1

我收到一条消息,说表达式是无效的标识符。我还收到一条消息,说单个group by无效。请推荐一个替代方案。

我有以下Oracle SQL语句:

代码语言:javascript
运行
复制
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

现有的数据应该是这样的……

代码语言:javascript
运行
复制
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

期望的结果是为每个差异条件做一个“真”与“假”的百分比,并按月分组,并显示为...

代码语言:javascript
运行
复制
Percent   Month
    50    10/12
    100   11/12
    0     12/12
EN

回答 1

Stack Overflow用户

发布于 2012-11-21 13:58:02

不能在定义列别名的同一范围内使用列别名。

您要么必须用GROUP BY TO_CHAR (ACTUALFINISHDATE,'MM/YY')替换GROUP BY DSCMONTH (对where子句执行相同的操作),要么将您的查询包装在另一个查询中。

喜欢,

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13482691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档