2013-03-18 58 views
0

这个查询:如何在一个单一的语句写来获得期望的结果

select audit_id, Count(TRAINING_RESULT_ID) safe 
from TBL_T_AUDIT_DETAILS 
where TRAINING_RESULT_ID =1 
group by audit_id 
order by audit_id 

给我的结果:

audit_id safe 
117  5 
118  3 
123  5 
130  7 
131  39 
136  38 

这个查询:

select audit_id, Count(TRAINING_RESULT_ID) unsafe 
from TBL_T_AUDIT_DETAILS 
where TRAINING_RESULT_ID =2 
group by audit_id 
order by audit_id 

给了我这些结果:

audit_id unsafe 
117   2 
118   3 
123   2 
131   2 
136   3 
141   3 
148   3 
151   4 
157   4 

最后,这个查询:

select audit_id, Count(TRAINING_RESULT_ID) na 
from TBL_T_AUDIT_DETAILS 
where TRAINING_RESULT_ID =3 
group by audit_id 
order by audit_id 

给我的结果:

audit_id na 
118  1 
147  124 
148  8 
157  116 
218  79 
226  47 

我怎样才能得到下面的结果?

audit_id na unsafe safe 
117  0 0  2 
118  1 3  3 
147  124 0  0 
148  8 0  0 
157  116 0  0 
218  79 0  0 
226  47 0  0 
141  0 3  0 
148  0 3  0 
123  0 0  2 
131  0 0  2 
136  0 0  3 

回答

4
select audit_id, 
sum(case when TRAINING_RESULT_ID = 1 then 1 else 0 end) safe 
sum(case when TRAINING_RESULT_ID = 2 then 1 else 0 end) unsafe 
sum(case when TRAINING_RESULT_ID = 3 then 1 else 0 end) na 
from TBL_T_AUDIT_DETAILS 
where TRAINING_RESULT_ID in (1, 2, 3) 
group by audit_id 
order by audit_id 
+0

THANKS可以哟帮助我如何caluclate安全 – Ram 2013-03-18 15:09:54

+0

(安全)的%/安全+不安全* 100 – Ram 2013-03-18 15:10:38

+0

这必须是在我的答案中包含一个外部查询(或者来自@AlexanderFedornko的答案,这也将起作用)。您只能计算总计的百分比,而不是单个行。另外,由于'na'状态,你必须防止零分。就像'SELECT safe /(safe + unsafe)FROM()WHERE safe + unsafe <> 0'。或者,您可以跳过'WHERE safe + unsafe <> 0'检查是否通过将where子句更改为WHERE TRAINING_RESULT_ID IN(1,2)'来省略内部查询中的'na'状态。 – 2013-03-18 15:23:51

1

还与COUNT()函数的选项

SELECT audit_id, 
     COUNT(case when TRAINING_RESULT_ID = 1 then TRAINING_RESULT_ID end) safe 
     COUNT(case when TRAINING_RESULT_ID = 2 then TRAINING_RESULT_ID end) unsafe 
     COUNT(case when TRAINING_RESULT_ID = 3 then TRAINING_RESULT_ID end) na 
FROM TBL_T_AUDIT_DETAILS 
WHERE TRAINING_RESULT_ID IN (1, 2, 3) 
GROUP BY audit_id 
ORDER BY audit_id 
相关问题