在这种特殊情况下,使用WHERE会不会更容易?
SELECT SUM(WTE) AS `Band6_WTE`
FROM `orthoptists` AS o
LEFT JOIN `instances` AS i
ON o.instance_FK = i.id
WHERE i.region = 14
AND band = "E"对于一般情况,您可以使用GROUP BY,因为您说您需要每个波段的结果(列波段中的每个值):
SELECT band, SUM(WTE) AS `WTE`
FROM `orthoptists` AS o
LEFT JOIN `instances` AS i
ON o.instance_FK = i.id
WHERE i.region = 14
GROUP BY band这将给出NULL或0,如果您愿意,可以使用IFNULL将NULL转换为0:
IFNULL(SUM(WTE), 0)编辑:正如您在评论中指出的那样,您需要为不同的乐队而不是多行创建多个列。一般来说,你不应该从SQL那里做到这一点(使用第二个查询并从你的代码执行一个数据透视操作),但有一些例外情况,在SQL之外这样做要复杂得多,所以这就是你如何做到这一点的:
SELECT
(SELECT SUM(WTE)
FROM `orthoptists` AS o
LEFT JOIN `instances` AS i
ON o.instance_FK = i.id
WHERE i.region = 14
AND band = "E") AS `Band6_WTE`,
(SELECT SUM(WTE)
FROM `orthoptists` AS o
LEFT JOIN `instances` AS i
ON o.instance_FK = i.id
WHERE i.region = 14
AND band = "F") AS `Band7_WTE`,
(SELECT SUM(WTE)
FROM `orthoptists` AS o
LEFT JOIN `instances` AS i
ON o.instance_FK = i.id
WHERE i.region = 14
AND band = "G") AS `Band8_WTE`精确的语法可能需要一些调整(一些数据库要求每个SELECT包含一个FROM子句,有些可能需要一个子选择中每列的名称,我不认为MySQL会这样,但我现在无法检查)但是这个原则应该适用。