我有一个oracle SQL查询,用于选择来自不同部门的公司计数。
select
a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM'),
count(*)
from
customer a, case b
where
a.cust_nb = b.case_cust_nb
and a.cust_company_nb in
('01062','01602','01603','01604','01605','01606')
and b.case_receive_dt > sysdate -365
and b.case_status_cd = 'CC'
group by
a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM')
order by
a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM')
这会返回count
a.cust_nm, a.cust_acct_nb, a.cust_company_nb, to_char(b.case_receive_dt, 'YYYYMM')
在同一个查询中,我需要再计算一次cust_acct_nb
例如: -
cust_acct_nb cust_acct_nb cust_acct_nb cust_acct_nb count(*) Final_Total
KFC 1 12 09-10-1991 12
KFC 1 12 10-10-1991 10
KFC 1 12 11-10-1991 10 32
KFC 2 12 09-10-1991 12
KFC 2 12 10-10-1991 10
KFC 2 12 11-10-1991 15 37
如何在同一查询中获取Final_Total
?
请帮助!!
答案 0 :(得分:2)
在select
语句中使用子查询,如下所示:
select a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM'),
count(*),
(select count(*)
from customer a1, case b1
where a1.cust_nb = b1.case_cust_nb
and a1.cust_company_nb in ('01062','01602','01603','01604','01605','01606')
and b1.case_receive_dt > sysdate -365
and b1.case_status_cd = 'CC'
and a1.cust_acct_nb = a.cust_acct_nb)
from customer a, case b
where a.cust_nb = b.case_cust_nb
and a.cust_company_nb in ('01062','01602','01603','01604','01605','01606')
and b.case_receive_dt > sysdate -365
and b.case_status_cd = 'CC'
group by a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM')
order by a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM');
<强>输出:强>
cust_acct_nb cust_acct_nb cust_acct_nb cust_acct_nb count(*) Final_Total
KFC 1 12 09-10-1991 12 32
KFC 1 12 10-10-1991 10 32
KFC 1 12 11-10-1991 10 32
KFC 2 12 09-10-1991 12 37
KFC 2 12 10-10-1991 10 37
KFC 2 12 11-10-1991 15 37
答案 1 :(得分:1)
你能试试吗?我无法测试它,因为我没有数据设置。
select
a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM'),
count(*)
from
customer a, case b
where
a.cust_nb = b.case_cust_nb
and a.cust_company_nb in
('01062','01602','01603','01604','01605','01606')
and b.case_receive_dt > sysdate -365
and b.case_status_cd = 'CC'
group by rollup
(a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM'))
order by
a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'YYYYMM')
答案 2 :(得分:0)
- Try This:
select
a.cust_nm,
a.cust_company_nb,
to_char(b.case_receive_dt, 'dd-mm-yyyy'),
decode(grouping(a.cust_acct_nb),1,'Sum of group',a.cust_acct_nb),
count(*)
from
customer a, case b
where
a.cust_nb = b.case_cust_nb
and a.cust_company_nb in
('01062','01602','01603','01604','01605','01606')
and b.case_receive_dt > sysdate -365
and b.case_status_cd = 'CC'
group by rollup(
a.cust_nm,
a.cust_acct_nb,
a.cust_company_nb,
to_char(b.case_receive_dt, 'dd-mm-yyyy'));
答案 3 :(得分:-1)
Oracle SQL使您可以使用 ROLLUP 扩展名查询一个查询中的总计和小计。以下是此类功能的示例:
SELECT fact_1_id,
fact_2_id,
SUM(sales_value) AS sales_value
FROM dimension_tab
GROUP BY ROLLUP (fact_1_id, fact_2_id)
ORDER BY fact_1_id, fact_2_id;
FACT_1_ID FACT_2_ID SALES_VALUE
---------- ---------- -----------
1 1 4363.55
1 2 4794.76
1 3 4718.25
1 4 5387.45
1 5 5027.34
1 24291.35
2 1 5652.84
2 2 4583.02
2 3 5555.77
2 4 5936.67
2 5 4508.74
2 26237.04
50528.39
您可以在http://www.oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets.php#rollup
获取更多示例