引用where子句中select列的值:Oracle

引用where子句中select列的值:Oracle,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我的桌子如下 微软ISM问题 ISSUE_ID ISSUE_DUE_DATE ISSUE_SOURCE_TYPE I1 25-11-2018 1 I2 25-12-2018 1 I3 27-03-2019 2 MS\u ISM\u源设置 SOURCE_ID MODULE_NAME 1 IT-Compliance 2 Risk Assessment 我写了下面的问题 with rs as

我的桌子如下

微软ISM问题

ISSUE_ID  ISSUE_DUE_DATE  ISSUE_SOURCE_TYPE
I1        25-11-2018      1
I2        25-12-2018      1
I3        27-03-2019      2
MS\u ISM\u源设置

SOURCE_ID MODULE_NAME
1         IT-Compliance
2         Risk Assessment
我写了下面的问题

with rs as
(select 
count(ISSUE_ID) as ISSUE_COUNT, src.MODULE_NAME, 
case 
when ISSUE_DUE_DATE<sysdate then 'Overdue'
when ISSUE_DUE_DATE between sysdate and sysdate + 90 then 'Within 3 months'
when ISSUE_DUE_DATE>sysdate+90 then 'Beyond 90 days'
end as date_range
from MS_ISM_ISSUE issue, MS_ISM_SOURCE_SETUP src
where issue.Issue_source_type = src.source_id
group by src.MODULE_NAME, case 
when ISSUE_DUE_DATE<sysdate then 'Overdue'
when ISSUE_DUE_DATE between sysdate and sysdate + 90 then 'Within 3 months'
when ISSUE_DUE_DATE>sysdate+90 then 'Beyond 90 days'
end)  
select ISSUE_COUNT,MODULE_NAME, DATE_RANGE,
(select count(ISSUE_COUNT) from rs where rs.MODULE_NAME=MODULE_NAME) as total from rs;
直到第3列,结果都是正确的。在第4列中,我想要的是给定模块名称的问题总数。因此,在上述情况下,第一行和第二行的“总计”列的值为2(因为IT合规性有2个问题),第三行的值为1(因为风险评估中存在一个问题)

本质上,我想要实现的是替换LastWhere子句中当前行的MODULE_名称。如何使用查询实现此目的?

好的,此条件

where rs.MODULE_NAME=MODULE_NAME
基本上和你写的一样

where MODULE_NAME = MODULE_NAME
这总是正确的(如果模块_name中没有空值)

尝试为内部查询和外部查询使用不同的表别名,例如

select count(ISSUE_COUNT) from rs rs2 where rs2.MODULE_NAME=rs.MODULE_NAME
你也可以尝试在这里使用,比如

select ISSUE_COUNT,
       MODULE_NAME,
       DATE_RANGE,
       COUNT(ISSUE_COUNT) OVER (PARTITION BY RS.MODULE_NAME) AS TOTAL
  from rs
不是子查询

确定,而是此条件

where rs.MODULE_NAME=MODULE_NAME
基本上和你写的一样

where MODULE_NAME = MODULE_NAME
这总是正确的(如果模块_name中没有空值)

尝试为内部查询和外部查询使用不同的表别名,例如

select count(ISSUE_COUNT) from rs rs2 where rs2.MODULE_NAME=rs.MODULE_NAME
你也可以尝试在这里使用,比如

select ISSUE_COUNT,
       MODULE_NAME,
       DATE_RANGE,
       COUNT(ISSUE_COUNT) OVER (PARTITION BY RS.MODULE_NAME) AS TOTAL
  from rs

代替子查询

谢谢Marcin的帮助。两种方法都有效!甚至我也想在with子句中为select语句创建两个别名,但想不出任何方法。我真傻,居然想不起在子查询中这样做:)谢谢Marcin的帮助。两种方法都有效!甚至我也想在with子句中为select语句创建两个别名,但想不出任何方法。我真傻,竟然想不起在子查询中这样做:)