MySQL上的子选择
我不知道这是否可行,但我正在尝试使用带有WHERE语句的两个连接进行select查询。我需要的是一个基于特定WHERE的字段和另一个具有不同WHERE的字段 当前SQL查询:MySQL上的子选择,mysql,select,Mysql,Select,我不知道这是否可行,但我正在尝试使用带有WHERE语句的两个连接进行select查询。我需要的是一个基于特定WHERE的字段和另一个具有不同WHERE的字段 当前SQL查询: SELECT SUM(a.totaltime), b.user_name, MONTHNAME(a.date) FROM a JOIN c on c.id = a.id JOIN b o
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 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'或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'。试试这个
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);
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);
“这次我需要包括另一个字段WHERE将是”what do Means?也就是说,我需要另一个基于WHERE
和YEAR(DATE(NOW())
)的列,而不是用另一个WHERE和YEAR(DATE(NOW())
,这是做什么的?您能提供更多关于您想要的数据库和样本输出的信息吗?”,YEAR函数以数字形式返回YEAR,而不是以布尔值(!?)形式返回YEAR。查询的这一部分根本不会影响查询本身。另一方面,如果你写YEAR(somedatecolumn)=YEAR(DATE(NOW())
,那么它会有一些意义。YEAR((CURDATE())上有一个额外的括号,应该是YEAR(CURDATE()),但它很好用!!:D谢谢