我正在开发一个项目,其中的报告具有三种状态:“已检查”、“处理中”和“已完成”
有两张 table !
tbl_tracking - 用于跟踪报告
report_id usr_id date status ---------------------------------------------- 0000 abc 2014/04/05 checked 0001 abc 2014/04/05 checked 0000 abc 2014/04/05 inprocess 0001 abc 2014/04/05 completed 0002 abc 2014/04/06 completed 0004 xyz 2014/04/05 checked 0005 xyz 2014/04/06 checked
tbl_timestatus - 用于跟踪员工处理报告的时间
usr_id date time_worked (hrs) ---------------------------------------------- abc 2014/04/05 6 abc 2014/04/06 5
现在我想创建一个 View 来始终显示所有内容的最新状态,因此我编写了此代码
CREATE VIEW VW_STATUS AS SELECT tb1.usr_id, tb1.date, COUNT(CASE tb1.status WHEN 'checked' THEN 1 ELSE NULL END) AS checkedcount, COUNT(CASE tb1.status WHEN 'inprocess' THEN 1 ELSE NULL END) AS inprocesscount, COUNT(CASE tb1.status WHEN 'completed' THEN 1 ELSE NULL END) AS compltedcount, CASE WHEN (tb1.usr_id=tb2.usr_id AND tb1.date=tb2.date) THEN tb2.time_worked ELSE NULL END AS timeworked FROM tbl_tracking tb1, tbl_timestatus tb2 GROUP BY tb1.usr_id, tb1.date;
预期输出:
usr_id date checkedcount inprocesscount completedcount timeworked --------------------------------------------------------------------------------------- abc 2014/04/05 2 1 1 6 abc 2014/04/06 0 0 1 5 xyz 2014/04/05 1 0 0 NULL xyz 2014/04/06 1 0 0 NULL
实际输出:
usr_id date checkedcount inprocesscount completedcount timeworked --------------------------------------------------------------------------------------- abc 2014/04/05 4 2 2 6 abc 2014/04/06 0 0 2 5 xyz 2014/04/05 2 0 0 NULL xyz 2014/04/06 2 0 0 NULL
虽然“timeworked”值保持正确,但计数(*)将自身相加两次!连接出现问题!需要同样的帮助..
最佳答案
你应该像下面这样尝试。请参阅此处的示例 fiddle http://sqlfiddle.com/#!3/0b24c/6
CREATE VIEW VW_STATUS AS
SELECT tb1.usr_id, tb1.date,
COUNT(CASE tb1.status WHEN 'checked' THEN 1 ELSE NULL END) AS checkedcount,
COUNT(CASE tb1.status WHEN 'inprocess' THEN 1 ELSE NULL END) AS inprocesscount,
COUNT(CASE tb1.status WHEN 'completed' THEN 1 ELSE NULL END) AS compltedcount,
tb2.time_worked
FROM tbl_tracking tb1
LEFT JOIN tbl_timestatus tb2
ON tb1.usr_id=tb2.usr_id
AND tb1.date=tb2.date
GROUP BY tb1.usr_id, tb1.date , tb2.time_worked
ORDER BY tb1.usr_id;
结果
关于mysql - 通过 JOIN 问题添加了 COUNT 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450834/