2016-01-14 94 views
0

两个表中的计算我有2个表娄我怎么能在MySQL

0 --> Pending 
1 --> Success 
2 --> Fail 

table : mntnc 
+-------+-------+-------+ 
| id | own | sts | 
+-------+-------+-------+ 
| 1 | BN | 1 | 
| 2 | BB | 2 | 
| 3 | BN | 1 | 
| 4 | BD | 1 | 
| 5 | BD | 0 | 

table : istlsi 
+-------+-------+-------+ 
| id | own | sts | 
+-------+-------+-------+ 
| 1 | BN | 1 | 
| 2 | BB | 1 | 
| 3 | BB | 1 | 
| 4 | BC | 0 | 
| 5 | BD | 2 | 
两个表

以上,我想下面

+-------+-----------+-----------+-----------+ 
| own | success | fail | pending | 
+-------+-----------+-----------+-----------+ 
| BN |  3 |  0 |  0 | 
| BB |  2 |  1 |  0 | 
| BD |  1 |  1 |  1 | 
| BC |  0 |  0 |  1 | 
+0

为 “mntnc” 表 选择自己的,总和(STS = 1)作为成功,总和(STS = 2)为不合格,总和(STS = 0)作为从mntnc未决; –

回答

3

的增加二者是表这里有两个关键点:

  1. 联盟表(我别名导致到B
  2. 为每列使用求和(case ...)。

首先我们将两个表结合在一起作为内联视图。

然后,我们对每个所需列使用case语句,并根据sts值将值设置为1或0。再总结那些...

SELECT own 
    , sum(case when sts=1 then 1 else 0 end) as Success 
    , sum(case when sts=2 then 1 else 0 end) as Fail 
    , sum(case when sts=0 then 1 else 0 end) as Pending 
FROM (SELECT ID, own, sts 
     FROM mntnc 
     UNION ALL 
     SELECT id, own, sts 
     FROM istlsi 
    ) B 
GROUP BY own