2016-04-27 44 views
0

這裏的情況:計算價值多少次出現在表的SQL

所以,在我的數據庫,一個人的工作X「負責任」和「鏈接」到工作Y.我要的是一個查詢返回:人員名稱,他的ID和他連接/負責任的職位數量。到目前爲止,我得到這個:

select id_job, count(id_job) number_jobs 
from 
(
select responsible.id 
from responsible 
union all 
select linked.id 
from linked 
GROUP BY id 
) id_job 
GROUP BY id_job 

它返回一個表,在第二第一列和出現次數ID。現在,我不能做的是將人的姓名與表格關聯起來。當我從開始就把它放在「選擇」中時,它給了我所有可能的組合......我該如何解決這個問題?提前致謝!

實例數據和理想的輸出:

| Person | 

id | name 
1 | John 
2 | Francis 
3 | Chuck 
4 | Anthony 

| Responsible | 

process_no | id 
100  | 2 
200  | 2 
300  | 1 
400  | 4 

| Linked | 

process_no | id 
101  | 4 
201  | 1 
301  | 1 
401  | 2 

OUTPUT: 

| OUTPUT | 

id | name | number_jobs 
1 | John | 3 
2 | Francis | 3 
3 | Chuck | 0 
4 | Anthony | 2 
+2

請添加示例數據和預期輸出 –

+0

好,會做,現在我 – Username79123

回答

0

嘗試這種方式

select prs.id, prs.name, count(*) from Person prs 
join(select process_no, id 
    from Responsible res 
    Union all 
    select process_no, id 
    from Linked lin) a on a.id=prs.id 
group by prs.id, prs.name 
0
select id, name, count(process_no) FROM (
    select pr.id, pr.name, res.process_no from Person pr 
     LEFT JOIN Responsible res on pr.id = res.id 
UNION 
    select pr.id, pr.name, lin.process_no from Person pr 
     LEFT JOIN Linked lin on pr.id = lin.id) src 
group by id, name 
order by id 

查詢未測試,給它一個鏡頭,但是這是你想要去

+0

嘗試過,但它產生的空桌...可能是什麼回事? – Username79123

+0

我使用了臨時表...從表名中刪除'#' – Veljko89

0

我建議每個聚集的方式表格由該人再加入結果返回person表:

select p.*, coalesce(r.cnt, 0) + coalesce(l.cnt, 0) as numjobs 
from person p left join 
    (select id, count(*) as cnt 
     from responsible 
     group by id 
    ) r 
    on r.id = p.id left join 
    (select id, count(*) as cnt 
     from linked 
     group by id 
    ) l 
    on l.id = p.id;