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...