この特定のケースでは、使用する方が簡単ではないでしょう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 からそれを行うべきではありません (2 番目のクエリを使用し、コードからピボット操作を実行します) が、例外があり、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 ではそうではないと思いますが、今は確認できません)。原則は関係なく適用できるはずです。