如何从两个连接表中查找计数

时间:2014-02-10 10:29:38

标签: sql sql-server-2008

我们必须为影响级别的每个风险类别找到计数,如上一个结果部分所示

风险表

RiskID  RiskName
----------------------

1   Risk1
2   Risk2
3   Risk3
4   Risk4
5   Risk5
6   Risk6
7   Risk7
8   Risk8
9   Risk9
10  Risk10
11  Risk11

类别表

Cat_ID  Cat_Name
--------------------------

1   Design
2   Operation
3   Technical

Risk_Category表

Risk_ID     Category_ID
------------------------

1       1
1       2
2       1
3       1
3       3
4       1
5       2
6       1
7       3
8       1
9       3
10      3

Risk_Impact_Assessment表

Risk_ID     Impact_Level    Impact_Score
---------------------------------------------

1       High        20  
2       Medium      15  
3       High        20
4       Low     10
5       High        20
6       High        20
7       High        20
8       Low     10
9       Medium      15
10      Low     15
11      Medium      15

结果应该是这样的

Cat_Name    Impact_Level_High   Impact_Level_Medium Impact_Level_Low
-------------------------------------------------------------------------------------

Design          1           1           2                               
Operation       2                                                   
Technical       2               2           1           

1 个答案:

答案 0 :(得分:1)

您可能希望使用group by子句以及case,例如:

select
 Cat_Name, 
 sum(case when Impact_Level = 'High' then 1 else 0 end) as [Impact_Level_High],
 sum(case when Impact_Level = 'Medium' then 1 else 0 end) as [Impact_Level_Medium],
 sum(case when Impact_Level = 'Low' then 1 else 0 end) as [Impact_Level_Low]
from [Risk_Impact_Assessment]
...
group by Cat_Name;

(我遗漏了所有的连接,我认为你可以写这些没问题)

你可以使用这个技巧来完成许多很酷的事情,包括参数排序和(就像这里)复杂的聚合函数,只需很少的工作。