简体   繁体   English

从Oracle SQL查询中获取计数

[英]Getting count of count from a Oracle SQL query

I have an oracle SQL query that selects the count of the company from different department. 我有一个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')

This return the count of a.cust_nm, a.cust_acct_nb, a.cust_company_nb, to_char(b.case_receive_dt, 'YYYYMM') 该返回counta.cust_nm, a.cust_acct_nb, a.cust_company_nb, to_char(b.case_receive_dt, 'YYYYMM')

In the same query, I need one more count of all cust_acct_nb 在同一个查询中,我还需要一个所有cust_acct_nb计数

Eg:- 例如:-

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 

How can I get Final_Total in same query ? 如何在同一查询中获得Final_Total

Please help!! 请帮忙!!

Use a subquery in the select statement as follows: 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');

OUTPUT: OUTPUT:

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 

Can you try this? 你能试试吗? I cant test it since I have no data setup. 我无法测试它,因为我没有数据设置。

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')
- 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'));

Oracle SQL gives you possibility to query totals and subtotals in one query with ROLLUP extension. Oracle SQL使您可以使用ROLLUP扩展在一个查询中查询总计和小计。 Here is an example of such functionality: 以下是此类功能的示例:

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

You can get more examples here http://www.oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets.php#rollup 您可以在这里获得更多示例http://www.oracle-base.com/articles/misc/rollup-cube-grouping-functions-and-grouping-sets.php#rollup

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

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