Você precisa usar
GROUP BY
como tal para obter o resultado desejado:SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id
Isso agrupará seus resultados. Observe que, como presumo que
order_id
e part_id
é um PK composto, SUM(cost)
acima provavelmente será = cost
(uma vez que você agrupa por uma combinação de dois campos que é garantido ser único. A subconsulta correlacionada abaixo irá superar esta limitação). Todas as linhas não agregadas buscadas precisam ser especificadas no
GROUP BY
fileira. Para mais informações, você pode ler um tutorial sobre
GROUP BY
aqui:EDITAR: Se você quiser usar uma coluna como agregada e não agregada, ou se precisar desagregar seus grupos, precisará usar uma subconsulta como esta:
SELECT
or1.order_id,
or1.cost,
or1.part_id,
(
SELECT SUM(cost)
FROM orders or2
WHERE or1.order_id = or2.order_id
GROUP BY or2.order_id
) AS total
FROM orders or1
WHERE or1.order_date BETWEEN xxx AND yyy