繁体   English   中英

SQL在外部查询中添加一个过滤器以应用于所有子查询

[英]SQL adding one filter in outer query to apply to all subqueries

我正在创建一个包含多个子查询的查询,这些子查询以不同的状态/类别/等显示事件数量。 日期过滤器将需要应用于所有子查询,以便计算在日期范围内创建的事件数。

由于报表将被移至Business Objects,因此我无法在子查询中多次指定日期。 因此,我将子查询中的事件表(inc)与外部查询中的另一个事件表(inc_filter)联接在一起,并希望将一个日期过滤器应用于所有子查询。

但是返回的结果不正确,我得到了多个行,这些行的值为0或1。

有人能指出我正确的方向吗?

SELECT 
(SELECT COUNT(*)
FROM Incident inc
WHERE  inc.id = inc_filter.id
                 AND inc.status = 'Open')
            "Total # of Open Inc",
(SELECT COUNT(*) 
FROM Incident inc
WHERE  inc.id = inc_filter.id
                 AND inc.status = 'Closed')
            "Total # of Closed Inc"
--more sub-queries here...

FROM Incident inc_filter
AND inc_filter.CREATED > '10-Apr-2017'
AND inc_filter.CREATED < '13-Apr-2017'

您可能只是在寻找条件聚合:

SELECT 
  COUNT(CASE WHEN status = 'Open' THEN 1 END) AS "Total # of Open Inc",
  COUNT(CASE WHEN status = 'Closed' THEN 1 END) AS "Total # of Closed Inc"
-- more counts here...
FROM Incident 
WHERE created >= DATE '2017-04-10' AND created < DATE '2017-04-13';

首先,您应该使用用case ,而不需要使用许多子查询,第二,如果我理解您的问题,则应使用sum()这样

SELECT sum(case when inc_filter.status = 'Open' then 1 else 0 end) as open,
sum(case when inc_filter.status = 'Closed' then 1 else 0 end) as closed

FROM Incident inc_filter
AND inc_filter.CREATED > '10-Apr-2017'
AND inc_filter.CREATED < '13-Apr-2017'

亲爱的,您需要在您的总和之上,再进行一次选择。 实际上,您正在使用组功能,但这适用于行级别。 您需要对所有子查询列求和以查看所需结果,例如您的查询将是

select sum("Total # of Open Inc") ,sum("Total # of Closed Inc")
from(
SELECT 
(SELECT COUNT(*)
FROM Incident inc
WHERE  inc.id = inc_filter.id
                 AND inc.status = 'Open')
            "Total # of Open Inc",
(SELECT COUNT(*) 
FROM Incident inc
WHERE  inc.id = inc_filter.id
                 AND inc.status = 'Closed')
            "Total # of Closed Inc"
--more sub-queries here...

FROM Incident inc_filter
AND inc_filter.CREATED > '10-Apr-2017'
AND inc_filter.CREATED < '13-Apr-2017');

但是最好使用联接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM