2015-10-06 142 views
0

我有两个表具有这种结构:SQL SELECT COUNT(*)

TABLE_1:

Column_A(P_Key) Column_B 
    Val1    Location1 
    Val2    Location1 
    Val3    Location2 
    Val4    Location3 
    Val4    Location4 
    Val4    Location5 

TABLE_2:

Column_A(P_Key) Column_B Column_C 
    Location1   Person_1 Person_2 
    Location2   Person_1 Person_3 
    Location3   Person_3 Person_4 
    Location4   Person_1 Person_5 
    Location5   Person_2 Person_3 

我需要一个查询来计数的项目数量每个人都负责在每个位置:

例如,查询应返回:

Person  Total 
Person_1  4 
Person_2  3 
Person_3  3 
Person_4  1 
Person_5  1 

这是SQL Server 2008 R2

谢谢!

+1

所以,这是一个直镜头真的: 'SELECT COUNT(column_names_desired)'对吗?给它一点点 – Coffee

+1

你应该看看'GROUP BY'关键字 – Matthew

+1

是的,你需要一个“GROUP BY” – Coffee

回答

3

我会倾向于unpivot的第二个表,然后再汇总:

select person, count(*) 
from ((select column_b as person 
     from table2 t2 join 
      table1 t1 
      on t2.column_a = t1.column_b 
    ) union all 
     (select column_c as person 
     from table2 t2 join 
      table1 t1 
      on t2.column_a = t1.column_b 
    ) 
    ) p 
group by person 
order by count(*) desc; 
+0

谢谢你这么多戈登! – user3314399

1

如果我正确unterstand您的需要此查询应符合您的期望:

SELECT DISTINCT t.column_a AS person, 
    (SELECT COUNT(*) FROM table_2 t1 WHERE t1.column_b = t.column_a) + (SELECT COUNT(*) FROM table_2 t2 WHERE t2.column_c = t.column_a) AS Total 
FROM 
    table_2 t