2014-09-02 21 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