Sql 多个select中子查询的同一部分

Sql 多个select中子查询的同一部分,sql,oracle,Sql,Oracle,我有一张这样的桌子 TABLEMAIN Q1 Name Group Zone Month Type 1 'N1' 'G1' 'Z1' 12 'T1' 4 'N1' 'G3' 'Z2' 12 'T6' 6 'N1' 'G1' 'Z5' 12 'T2' 3 'N2' 'G4' 'Z5' 12 'T4' . . . 我有一些类似的方法来获得一定的结果 Query1: select (SUM(CASE Q1&g

我有一张这样的桌子

TABLEMAIN

Q1  Name  Group  Zone  Month  Type
1   'N1'  'G1'   'Z1'  12     'T1'
4   'N1'  'G3'   'Z2'  12     'T6'
6   'N1'  'G1'   'Z5'  12     'T2'
3   'N2'  'G4'   'Z5'  12     'T4'
.
.
.
我有一些类似的方法来获得一定的结果

Query1:
select
(SUM(CASE Q1>=2 and Q1<=4 THEN 1 ELSE 0 END)) TOTAL,
(CASE WHEN Type = 'T1' THEN SUM(CASE WHEN Q1=4 THEN 1 ELSE 0 END)) T1TYPE,
(CASE WHEN Type = 'T1' THEN SUM(CASE WHEN Q1=4 THEN 1 ELSE 0 END)) T2TYPE,
Type,
**Zone,**
Month
from 
TABLEMAIN
GROUP BY Type, **Zone,** Month;

Query2:
select
(SUM(CASE Q1>=2 and Q1<=4 THEN 1 ELSE 0 END)) TOTAL,
(CASE WHEN Type = 'T1' THEN SUM(CASE WHEN Q1=4 THEN 1 ELSE 0 END)) T1TYPE,
(CASE WHEN Type = 'T1' THEN SUM(CASE WHEN Q1=4 THEN 1 ELSE 0 END)) T2TYPE,
Type,
**Group,**
Month
from 
TABLEMAIN
GROUP BY Type, **Group,** Month;
Query1:
选择

(SUM(情况Q1>=2,Q1=2,Q1=2,Q1=2,Q1也许。如果您愿意,可以使用分组集
,在一个查询中完成所有操作:

select SUM(CASE Q1>=2 and Q1<=4 THEN 1 ELSE 0 END) as TOTAL,
       (CASE WHEN Type = 'T1' THEN SUM(CASE WHEN Q1=4 THEN 1 ELSE 0 END)) as T1TYPE,
       (CASE WHEN Type = 'T1' THEN SUM(CASE WHEN Q1=4 THEN 1 ELSE 0 END)) as T2TYPE
       Type, **Zone,**, **Group,** Month
from TABLEMAIN
GROUP BY GROUPING SETS((Type, **Zone,** Month), (Type, **Group,** Month));

选择SUM(案例Q1>=2,案例Q1I第二个带有@GolezTrol注释。希望进一步解释

SUBQUERY FACTORING
是您所需要的。
WITH
子句或SUBQUERY FACTORING子句是SQL-99标准的一部分,并在Oracle 9.2中添加到Oracle SQL语法中。WITH子句可以作为内联视图处理或作为临时表解析。后者的优点是重复引用<代码>子查询
可能更有效,因为数据很容易从临时表中检索,而不是每个引用都需要

WITH data AS(
<your subquery>
)
SELECT * FROM data
bla bla bla...
,数据为(
)
从数据中选择*
呜呜呜呜。。。

将其放在光标中,将值放入变量中,并在每次选择中使用该变量。因此,从技术上讲,您只需执行一次。请查看。
WITH data AS(
<your subquery>
)
SELECT * FROM data
bla bla bla...