2

我不知道这是否可能,但我正在尝试使用带有 WHERE 语句的几个 JOINS 进行选择查询。我需要的是一个基于特定 WHERE 的字段和另一个具有不同 WHERE 的字段。

当前 SQL 查询:

SELECT SUM(a.totaltime), b.user_name, MONTHNAME(a.date)
FROM a 
JOIN c on c.id = a.id                                                                    
JOIN b on b.userid = c.userid    
LEFT JOIN d on a.projid = d.projectid                                                                       
LEFT JOIN e on a.account_id = e.salesorderid                                                          
LEFT JOIN f on e.salesorderid = f.salesorderid                                                      
LEFT JOIN g on d.projectid = g.projectid                                                                     
WHERE c.deleted != "1" AND YEAR(DATE(NOW())) AND ( f.cf_991 = '1' OR g.cf_990 = '1') 
group by user_name,MONTHNAME(a.date);

这工作正常,但这次我需要包含另一个字段,WHERE 将是:

WHERE c.deleted != "1" AND YEAR(DATE(NOW())) AND ( f.cf_991 = '0' OR g.cf_990 = '0') 

非常感谢任何帮助谢谢

编辑:

当前输出为:

 total_time        username        MONTHNAME(a.date)
 22.5              admin           April
 21                admin           June
 15                max             April

所以以上是基于 f.cf_991 = '1' OR g.cf_990 = '1'

我需要的是这个:

 total_time        username        MONTHNAME(a.date)        total_time_2  
 22.5              admin           April                    5
 21                admin           June                     9
 15                max             April                    13

total_time_2 基于 f.cf_991 = '0' 或 g.cf_990 = '0'。

4

2 回答 2

3
SELECT SUM(CASE WHEN f.cf_991 = '1' OR g.cf_990 = '1' THEN a.totaltime END) as total_time
, b.user_name, MONTHNAME(a.date)
, SUM(CASE WHEN f.cf_991 = '0' OR g.cf_990 = '0' THEN a.totaltime END) as total_time_2
FROM a 
JOIN c on c.id = a.id                                                                    
JOIN b on b.userid = c.userid    
LEFT JOIN d on a.projid = d.projectid                                                                       
LEFT JOIN e on a.account_id = e.salesorderid                                                          
LEFT JOIN f on e.salesorderid = f.salesorderid                                                      
LEFT JOIN g on d.projectid = g.projectid                                                                     
WHERE c.deleted != "1" 
AND YEAR(CURDATE()) = a_column_containing_a_date
AND (
       ( f.cf_991 = '1' OR g.cf_990 = '1') 
     OR
       ( f.cf_991 = '0' OR g.cf_990 = '0')
    )
group by user_name,MONTHNAME(a.date);
于 2013-07-29T08:52:34.867 回答
0

试试这个

SELECT 
SUM(if(f.cf_991 = '1' || g.cf_990 = '1',a.totaltime,0)),
SUM(if(f.cf_991 = '0' || g.cf_990 = '0',a.totaltime,0)),
b.user_name, MONTHNAME(a.date) FROM a 
JOIN c on c.id = a.id 
JOIN b on b.userid = c.userid
LEFT JOIN d on a.projid = d.projectid 
LEFT JOIN e on a.account_id = e.salesorderid
LEFT JOIN f on e.salesorderid = f.salesorderid
LEFT JOIN g on d.projectid = g.projectid
 WHERE c.deleted != "1" AND YEAR(DATE(NOW()))
and (( f.cf_991 = '1' OR g.cf_990 = '1')  or( f.cf_991 = '0' OR g.cf_990 = '0') )
group by ser_name,MONTHNAME(a.date);
于 2013-07-29T08:58:46.813 回答