2014-09-02 63 views
0

总数我有得到员工的总数与交易

employeeid, country, state, and city 

一个员工表以后,我的交易表

transaction_id, employeeid, transaction-details 

所以我需要

country state city total(no_of_employee), count(transactions), count(no_of_employee_done_transaction) 

我已经尝试并能够获得

country state city count(transactions), count(no_of_employee_done_transaction) 

通过使用此查询:

select em.Country, em.state, em.city , count(transaction_id) as "count(transaction)" , count(distinct(employeeid)) as "count(number of employee done transaction)" 
    from transaction tr 
    right outer join employee em on tr.employeeid = em.employeeid 
    where to_char(tran_date,'Mon-YYYY')='Jun-2014' 
    group by em.country,em.state, em.city; 

,如果我把count(employee_id)在选择列表中,然后它总是等于count(transaction_id) 什么修改上面的查询,实现count(employee_id)

+0

请提供样品表数据和所需结果。 – 2014-09-02 10:39:34

+0

即你想从每个城市的交易表中获得两个不同的计数?我不认为你可以在没有子查询或CTE或类似的单个查询中做到这一点。 – Rup 2014-09-02 10:42:15

+0

您是否尝试过COUNT(DISTINCT CASE WHERE transaction_id不为NULL then employeeid)AS“count(no_of_employee_done_transaction)” – scragar 2014-09-02 10:43:05

回答

0

看来,在一个地方,您希望从员工表和第二位员工的总数中,您希望从交易表完成交易的员工。试试:

select em.Country, 
     em.state, 
     em.city , 
     count(distinct em.employeeid), 
     count(transaction_id) as "count(transaction)" , 
     count(distinct tr.employeeid) as "count(number of employee done transaction)" 
    from transaction tr 
    right outer join employee em on tr.employeeid = em.employeeid 
    where to_char(tran_date,'Mon-YYYY')='Jun-2014' 
    group by em.country,em.state, em.city; 
+0

再计数(不同的em.employeeid)等于计数(不同的tr.employeeid) – donstack 2014-09-02 10:52:18

+0

这意味着,对于2014年6月,每个员工完成了至少一次交易。您可以从单个表中检查一次,从2014年6月的交易中进行一次检查,然后再次从员工表中进行计数。 – San 2014-09-02 10:55:48

+0

抱歉计数(不同的em.employeeid)等于count(transaction_id)为“count(transaction)” – donstack 2014-09-02 10:58:15

0

使用SQL Subquery

select a.employeeid,a.country,a.state,a.city, 
(select count(*) from employees) as count_employees, 
(select count(*) from transactions) as count_transactions, 
(select count(*) from employees where employee_id=a.employee_id) as no_of_employee_transactions 
    from transactions a 
where to_char(a.tran_date,'Mon-YYYY')='Jun-2014' 
group by a.employeeid,a.country,a.state,a.city; 
0

不是很清楚您的要求。请看看这是你想要的。

select em.Country, em.state, em.city , count(transaction_id) as "count(transaction)" , count(distinct(employeeid)) as "count(number of employee done transaction)", 
(select count(distinct(employeeid)) as total(no_of_employee) 
    from employee c 
    where em.Country = c.Country 
      em.state = c.state 
      em.city = c.city) 
    from transaction tr 
    right outer join employee em on tr.employeeid = em.employeeid 
    where to_char(tran_date,'Mon-YYYY')='Jun-2014' 
    group by em.country,em.state, em.city; 
+0

是否employee'id始终是唯一的? – 2014-09-03 06:39:22

+1

是的独特是多余的。感谢您指出@DamienJoe。 – user3104950 2014-09-04 15:23:36