引用where子句中select列的值:Oracle
我的桌子如下 微软ISM问题引用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
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语句创建两个别名,但想不出任何方法。我真傻,竟然想不起在子查询中这样做:)