任务:
BackgroundWorker backgroundWorker = new BackgroundWorker(getActivity().getApplicationContext());
backgroundWorker.execute();
消息:
id | title | description |
---------------------------------------------------------------------
1 | Task1 | Descr1 |
2 | Task2 | Descr1 |
3 | Task2 | Descr1 |
4 | Task2 | Descr1 |
5 | Task2 | Descr1 |
我想在这里显示:
id | task_id | message | status |
---------------------------------------------------------------------
1 | 1 | Message1 | HOLD
2 | 1 | Message2 | OK
3 | 1 | Message3 | ERROR
4 | 1 | Message4 | ERROR
5 | 2 | Message5 | HOLD
6 | 2 | Message6 | OK
7 | 2 | Message7 | OK
8 | 2 | Message7 | OK
9 | 3 | Message7 | OK
答案 0 :(得分:3)
时,你可以在sum和CASE上使用选择性聚合
select task.id
, task.title
, task.description
, sum(case when Message.status = 1 then 1 else 0 end ) status1
, sum(case when Message.status = 2 then 1 else 0 end ) status2
, sum(case when Message.status = 3 then 1 else 0 end ) status3
from Task
INNER JOIN Message ON Task.id = Message.task_id
group by task.id
, task.title
, task.description
答案 1 :(得分:1)
另一种方式
SELECT task.id, task.title, task.description,
SUM(DECODE (status, 'HOLD',1,0 end)) AS "HOLD_COUNT"
SUM(DECODE (status, OK,1, 0 end)) AS "OK_COUNT"
SUM(DECODE (status, ERROR,1, 0 end ) AS "ERROUR_COUNT"
FROM task
JOIN Message ON Task.id = Message.task_id
group by task.id, task.title , task.description
答案 2 :(得分:1)
我相信正确的解决方案是:
select t.id, t.title, t.description,
coalesce(sum( m.status = 'Hold' ), 0) as num_hold,
coalesce(sum( m.status = 'OK' ), 0) as num_ok,
coalesce(sum( m.status = 'Error' ), 0) as num_error
from task t left join
message m
on m.task_id = t.id
group by t.id, t.title, t.description;